Есть ли способ универсально отменить все вызовы для установки на любом отключенном компоненте или скрыть ошибки, возникшие при попытке его выполнить? - PullRequest
0 голосов
/ 21 июня 2019

Я начну с того, что на самом деле я не пытаюсь скрыть ошибки, я собираюсь их исправить, но мне нужно знать, возможно ли это.

Я переписываю реактивный проект с .net back end, переходя от фреймворка к ядру.

У меня есть два компонента (один в исходном проекте и один в новом проекте), которые по сути одинаковы.

Это модальное устройство, которое при открытии собирает и отображает статью. Если модальное окно закрыто, компонент отключается, и если это происходит до того, как данные статьи возвращаются (с использованием fetch), он в настоящее время выдает ошибку, поскольку пытается обновить состояние не подключенного компонента.

Такое поведение ожидается.

В новом проекте я собирался добавить AbortController для прерывания вызова выборки, когда это необходимо, но я заметил, что в старом проекте, когда закрытие модального режима перед сбором данных не выдает ошибку. Компонент размонтируется, затем состояние обновляется, но по какой-то причине я не получаю сообщение об ошибке. Нет переменной isMounting, отслеживающей состояние монтирования, и нет контроллера прерывания.

Я добавил журналы консоли для каждого соответствующего метода, чтобы убедиться, что он был отключен перед обновлением состояния.

старый вывод на консоль проекта

вывод новой консоли проекта

Может ли что-то скрывать эти ошибки? Или помешать действию все вместе?

оба проекта используют реакцию 16, но на старые проекты ссылаются извне (https://unpkg.com/react@16/umd/react.development.js), а новый предоставляется через npm (^ 16.8.6).

вот соответствующий код из старого проекта, так как это тот, где ошибки не создаются (новый проект практически такой же)

componentDidMount() {
    fetch(`{url to get article}`,
        { credentials: "include", headers: { accept: "application/json" } })
        .then(res => res.json())
        .then(gatheredData => this.setState({ gatheredData }))
}

нет компонентаWillUnmount.

Ответы [ 2 ]

0 голосов
/ 29 июня 2019

Я выяснил, что в старом проекте первоначальный автор писал его так, что (хотя было указано, что для разработки используется полная версия) он всегда импортировал минимизированную рабочую версию реакции извне.Вот что заставило ошибки не показывать.Когда я это исправил, консоль загорелась, как рождественская елка.

0 голосов
/ 21 июня 2019

Вот как я это делаю, когда не могу удалить вызов из компонента

componentDidMount() {
    this.mounted=true
    fetch(`{url to get article}`,
        { credentials: "include", headers: { accept: "application/json" } })
        .then(res => res.json())
        .then(gatheredData => {
          if (this.mounted) {
            this.setState({ gatheredData })
          }
        })
}

componentWillUnmount() {
    this.mounted=false
}
...