Как насчет нативного 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
Из документации от React :
setState()
не сразу мутируетthis.state
, а создает ожидающий переход состояния. Доступ кthis.state
после вызова этого метода может потенциально вернуть существующее значение.
. Если вы хотите, чтобы функция выполнялась после изменения состояния, передайте ее в поле
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(); } }
componentDidUpdate
. Он будет вызван после того, как государство изменится. – Keysox 16 May 2016 в 21:34shouldComponentUpdate
не указано поведение, которое указывает иначе. Что именно вы пытаетесь сделать в обратном вызове, который вы передаетеsetState
, который вы хотите выполнить перед повторной обработкой? – Michael Parker 2 June 2016 в 14:39