异步情况:
一般来说,react在事件处理函数内部的 setState 都是异步的,比如合成事件onClick
,onBlur
,其次react提供的生命周期钩子函数中也是异步
同步情况
在原生环境下为同步,即使用定时器(setTimeout)
,promise
,axios
等情况下
原因
在 React 的 setState
函数实现中,会根据一个变量 isBatchingUpdate
判断是直接更新 this.state
还是放到队列中回头再说,而且 isBatchingUpdate
默认是 false
,也就是表示 setState
会同步更新 this.state
,但是,有一个函数 batchedUpdate
,这个函数会把 isBatchingUpdate
修改为 true
,而当 React
在调用事件处理函数之前就会调用这个 batchedUpdates
,造成的后果,就是由 React
控制的事件处理过程 setState
不会同步更新 this.state