Подтвердить что ты не робот

componentWillMount устарел и будет удален в следующей крупной версии 0.54.0 в React Native

Я использую последнюю версию родной версии 0.54.0, и всякий раз, когда запускаются приложения на iOS, появляется предупреждение об отказе от методов жизненного цикла. а также обновите компоненты.

Предупреждение:

componentWillMount устарел и будет удален в следующей крупной версии. Вместо этого используйте componentDidMount. В качестве временного решения можно переименовать в UNSAFE_componentWillMount. Обновите следующие компоненты: Контейнер, Текст, TouchableOpacity, Transitioner, View

Я также изменяю в соответствии с waring add prefix UNSAFE_ каждый из методов.

UNSAFE_componentDidMount() {
}
UNSAFE_componentWillMount() {
}
UNSAFE_componentWillUpdate(nextProps, nextState) {
}
UNSAFE_componentWillReceiveProps(nextProps) {
}

Хотя предупреждение продолжается. Пожалуйста, помогите мне.

В настоящее время я скрываю YellowBox в моих приложениях.

import { YellowBox } from 'react-native';

render() {

  YellowBox.ignoreWarnings([
    'Warning: componentWillMount is deprecated',
    'Warning: componentWillReceiveProps is deprecated',
  ]);
}
4b9b3361

Ответ 1

Вы должны переместить весь код из компонента componentWillMount в конструктор или компонентDidMount.

componentWillMount() вызывается непосредственно перед установкой. Он вызывается перед render(), поэтому вызов setState() синхронно в этом методе не приведет к дополнительной визуализации. Обычно мы рекомендуем использовать конструктор(). Избегайте введения каких-либо побочных эффектов или подписки в этом методе. В этих случаях используйте компонент componentDidMount(). Это единственный крючок жизненного цикла, вызванный рендерингом сервера.

componentDidMount() вызывается сразу после установки компонента. Инициализация, требующая узлов DOM, должна идти здесь. Если вам нужно загружать данные с удаленной конечной точки, это хорошее место для создания экземпляра сетевого запроса. Этот метод является хорошим местом для настройки подписки. Если вы это сделаете, не забудьте отказаться от подписки в компонентеWillUnmount(). Вызов setState() в этом методе вызовет дополнительный рендеринг, но это произойдет до того, как браузер обновит экран. Это гарантирует, что даже если render() будет вызываться дважды в этом случае, пользователь не увидит промежуточное состояние. Используйте этот шаблон с осторожностью, поскольку он часто вызывает проблемы с производительностью. Однако это может быть необходимо для таких случаев, как модалы и всплывающие подсказки, когда вам нужно измерить узел DOM, прежде чем отображать что-то, зависящее от его размера или положения.

Из официальных документов

Ответ 2

componentDidMount не является устаревшим и определенно безопасен в использовании, поэтому нет необходимости добавлять UNSAFE_ к этому методу. Компоненты componentWillSomething, похоже, находятся на пути к выходу. Вместо componentWillMount используйте конструктор для материала, который не производит побочных эффектов, и используйте componentDidMount для материала, который делает.

Ответ 3

Вам не следует использовать componentWillSomething, чтобы использовать constructor или componentDidMount

Однако, вы должны быть очень осторожны, какой вы будете использовать. Типичный сценарий - это когда вы хотите отобразить загрузку (используя состояния) сразу после открытия экрана

this.setState({ isLoading: true });
...
this.setState({ isLoading: false});

В этом случае вы должны использовать componentDidMount для установки состояний. Это то, что сказал Реакт о constructors

Как правило, в React конструкторы используются только для двух целей:

  1. Инициализация локального состояния путем присвоения объекта this.state.

  2. Привязка методов обработчика событий к экземпляру.

Вы не должны вызывать setState() в конструкторе(). Вместо этого, если вашему компоненту нужно использовать localstate, присвойте начальное состояние this.state непосредственно в конструкторе.

Хорошее кодирование!