React Js .. обновление состояния, но длина массива не меняется сразу [дубликат]

Чтобы защитить вашу переменную, совместно используемую другим экземпляром, вам нужно создать новую переменную экземпляра каждый раз, когда вы создаете экземпляр. Когда вы объявляете переменную внутри класса, она является переменной класса и совместно используется всем экземпляром. Если вы хотите сделать это, например, необходимо использовать метод init для повторной инициализации переменной, ссылаясь на функцию экземпляра

init (). Эта специальная функция вызывается всякий раз, когда создается новый объект этого класса.

Этот тип функции также называется конструкторами в объектно-ориентированном программировании (ООП). Обычно мы используем его для инициализации всех переменных.

Например:

class example:
    list=[] #This is class variable shared by all instance
    def __init__(self):
        self.list = [] #This is instance variable referred to specific instance
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);
});
397
ответ дан Michael Parker 27 August 2018 в 05:31
поделиться

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

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

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

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

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

6
ответ дан Asad Khan 27 August 2018 в 05:31
поделиться

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

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

1
ответ дан osrpt 27 August 2018 в 05:31
поделиться

Как указано в документации 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 27 August 2018 в 05:31
поделиться
Другие вопросы по тегам:

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