Чтобы защитить вашу переменную, совместно используемую другим экземпляром, вам нужно создать новую переменную экземпляра каждый раз, когда вы создаете экземпляр. Когда вы объявляете переменную внутри класса, она является переменной класса и совместно используется всем экземпляром. Если вы хотите сделать это, например, необходимо использовать метод init для повторной инициализации переменной, ссылаясь на функцию экземпляра
init (). Эта специальная функция вызывается всякий раз, когда создается новый объект этого класса.
Этот тип функции также называется конструкторами в объектно-ориентированном программировании (ООП). Обычно мы используем его для инициализации всех переменных.
blockquote>Например:
class example: list=[] #This is class variable shared by all instance def __init__(self): self.list = [] #This is instance variable referred to specific instance
Из документации от React :
setState()
не сразу мутируетthis.state
, а создает ожидающий переход состояния. Доступ кthis.state
после вызова этого метода может потенциально вернуть существующее значение.blockquote>
. Если вы хотите, чтобы функция выполнялась после изменения состояния, передайте ее в поле
setState
, и вызовы могут быть собраны для повышения производительности. как обратный вызов.this.setState({value: event.target.value}, function () { console.log(this.state.value); });
Вот документы React:
НИКОГДА не мутируйте this.state напрямую, так как вызов setState () впоследствии может заменить мутацию, которую вы сделали. Обработайте this.state, как если бы он был неизменным.
setState () не сразу мутирует this.state, но создает ожидающий переход состояния. Доступ к this.state после вызова этого метода может потенциально вернуть существующее значение.
Нет гарантии синхронной работы вызовов с setState, и вызовы могут быть собраны для повышения производительности. setState () всегда вызывает повторную визуализацию, если логика условного воспроизведения не реализована в shouldComponentUpdate ().
Если используются изменяемые объекты и логика не может быть реализована в shouldComponentUpdate (), вызов только setState () когда новое состояние отличается от предыдущего состояния, избежит ненужных повторных передач.
Следите за методами реагирования на жизненный цикл!
Я работал несколько часов, чтобы узнать, что getDerivedStateFromProps
будет вызван после каждого setState()
.
Как указано в документации React, нет гарантии того, что setState
запущен синхронно, поэтому ваш console.log
может вернуть состояние до его обновления.
Майкл Паркер упоминает о передаче обратного вызова внутри setState
. Другой способ обработки логики после изменения состояния осуществляется с помощью метода жизненного цикла componentDidUpdate
, который является методом, рекомендованным в документах React.
Обычно мы рекомендуем использовать для этой логики componentDidUpdate ().
blockquote>Это особенно полезно, когда могут быть последовательные
setState
s, и вы хотели бы запустить ту же функцию после каждого изменения состояния. Вместо добавления обратного вызова к каждомуsetState
, вы можете поместить функцию внутриcomponentDidUpdate
с конкретной логикой внутри, если необходимо.// example componentDidUpdate(prevProps, prevState) { if (this.state.value > prevState.value) { this.foo(); } }