React this.state имеет значение null сразу после setStat [duplicate]

Это полезно при использовании Объектов значения . Ниже приведен фрагмент из Portland Pattern Repository :

Примерами объектов значений являются такие числа, как числа, даты, денежные средства и строки. Обычно это небольшие объекты, которые используются довольно широко. Их идентичность основана на их состоянии, а не на их объектной идентичности. Таким образом, вы можете иметь несколько копий одного и того же концептуального объекта ценности.

Таким образом, я могу иметь несколько копий объекта, который представляет дату 16 января 1998 года. Любая из этих копий будет равна друг другу. Для небольшого объекта, такого как это, часто легче создавать новые и перемещать их, а не полагаться на один объект для представления даты.

Объект значения должен всегда переопределять .equals () в Java (или = в Smalltalk). (Не забудьте также переопределить .hashCode ().)

blockquote>

196
задан tarrsalah 11 June 2015 в 13:58
поделиться

4 ответа

Из документации от React :

setState() не сразу мутирует this.state, а создает ожидающий переход состояния. Доступ к this.state после вызова этого метода может потенциально вернуть существующее значение.

. Если вы хотите, чтобы функция выполнялась после изменения состояния, передайте ее в поле setState, и вызовы могут быть собраны для повышения производительности. как обратный вызов.

this.setState({value: event.target.value}, function () {
    console.log(this.state.value);
});
396
ответ дан Michael Parker 24 August 2018 в 08:30
поделиться

Вот документы React:

НИКОГДА не мутируйте this.state напрямую, так как вызов setState () впоследствии может заменить мутацию, которую вы сделали. Обработайте this.state, как если бы он был неизменным.

setState () не сразу мутирует this.state, но создает ожидающий переход состояния. Доступ к this.state после вызова этого метода может потенциально вернуть существующее значение.

Нет гарантии синхронной работы вызовов с setState, и вызовы могут быть собраны для повышения производительности. setState () всегда вызывает повторную визуализацию, если логика условного воспроизведения не реализована в shouldComponentUpdate ().

Если используются изменяемые объекты и логика не может быть реализована в shouldComponentUpdate (), вызов только setState () когда новое состояние отличается от предыдущего состояния, избежит ненужных повторных передач.

6
ответ дан Asad Khan 24 August 2018 в 08:30
поделиться

Следите за методами реагирования на жизненный цикл!

Я работал несколько часов, чтобы узнать, что getDerivedStateFromProps будет вызван после каждого setState().

1
ответ дан osrpt 24 August 2018 в 08:30
поделиться

Как указано в документации React, нет гарантии того, что setState запущен синхронно, поэтому ваш console.log может вернуть состояние до его обновления.

Майкл Паркер упоминает о передаче обратного вызова внутри setState. Другой способ обработки логики после изменения состояния осуществляется с помощью метода жизненного цикла componentDidUpdate, который является методом, рекомендованным в документах React.

Обычно мы рекомендуем использовать для этой логики componentDidUpdate ().

Это особенно полезно, когда могут быть последовательные setState s, и вы хотели бы запустить ту же функцию после каждого изменения состояния. Вместо добавления обратного вызова к каждому setState, вы можете поместить функцию внутри componentDidUpdate с конкретной логикой внутри, если необходимо.

// example
componentDidUpdate(prevProps, prevState) {
  if (this.state.value > prevState.value) {
    this.foo();  
  }
}
25
ответ дан Yo Wakita 24 August 2018 в 08:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: