Поскольку порядок свойств объекта не гарантирован, порядок setState также не гарантируется.Кроме того, все состояния внутри setStates обновляются один раз, поскольку они существуют в объекте.Итак, в вашем примере оба состояния loading
и setup
обновляются одновременно.Но мы не можем сказать его порядок, что loading
будет первым, а setup
будет длиться.Мы не можем сказать, что одно состояние будет true
, а другое - false
.Оба состояния обновляются до false
сразу, за исключением того, что их порядок не гарантирован (порядок свойств в объекте).
Будет ли браузер дважды рисовать и разметку (по мере изменениядва состояния)?
Браузер будет перерисовывать после обновления состояния, т.е.оба состояния уже затронуты, прежде чем браузер выполнит перерисовку.Хук рендеринга будет вызываться дважды, один раз для начального состояния и один раз для обновленного состояния.
Если вы хотите, чтобы одно состояние было true
, а другое состояние было false
, тогда выможно использовать обратный вызов, как:
this.setState({
loading: false
}, () => {
setTimeout(() => {
this.setState({
setup: false
})
}, 5000) // setup to false after 5 seconds