setState в реакции не работает над кликом [duplicate]

Как насчет нативного Sql * plus spooling?

run.bat:

sqlplus hr/hr@sandbox @d:\run.sql

run.sql:

spool d:\run.log
set echo on 

select * from dual
/
exit

run.log:

01:50:20 HR@sandbox> 
01:50:20 HR@sandbox> select * from dual
01:50:20   2  /

D
-
X

Elapsed: 00:00:00.00
01:50:21 HR@sandbox> exit
211
задан tarrsalah 11 June 2015 в 13:58
поделиться

5 ответов

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

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

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

this.setState({value: event.target.value}, function () {
    console.log(this.state.value);
});
396
ответ дан Michael Parker 22 August 2018 в 19:21
поделиться
  • 1
    Хороший ответ. Наблюдение, которое мне нужно сделать, - осторожно использовать valueLink. Он работает хорошо, если вам не нужно форматировать / маскировать ввод. – Dherik 18 December 2015 в 03:31
  • 2
    Вы также можете проверить componentDidUpdate. Он будет вызван после того, как государство изменится. – Keysox 16 May 2016 в 21:34
  • 3
    Быстрый вопрос, если я могу, я вижу, как только мы передаем функцию, которая нам нужна в качестве callback для setState, я надеялся, что func будет выполнен первым до вызова render (). Но я вижу, что порядок setState () - & gt; render () - & gt; обратный вызов setStates (). это нормально? Что делать, если мы хотим контролировать наш рендер, основываясь на том, что мы делаем в обратном вызове? <Я> shouldComponentUpdate ? – semuzaboi 2 June 2016 в 10:44
  • 4
    Изменение состояния компонента всегда вызывает повторную визуализацию, если в shouldComponentUpdate не указано поведение, которое указывает иначе. Что именно вы пытаетесь сделать в обратном вызове, который вы передаете setState, который вы хотите выполнить перед повторной обработкой? – Michael Parker 2 June 2016 в 14:39
  • 5
    ...Зачем? Может ли кто-то оправдать это? – JackHasaKeyboard 1 September 2017 в 12:26

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

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

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

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

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

6
ответ дан Asad Khan 22 August 2018 в 19:21
поделиться
  • 1
    Не могли бы вы добавить ссылку на документ в свой ответ? Благодарю. – Pang 13 April 2017 в 05:22

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

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

1
ответ дан osrpt 22 August 2018 в 19:21
поделиться

Как указано в документации 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 22 August 2018 в 19:21
поделиться
0
ответ дан black 5 November 2018 в 16:35
поделиться
Другие вопросы по тегам:

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