state
state 的更新情况
在由于 React 引发的事件处理,如 OnClink 等触发 setState,就不会立即同步 this.state 。如果是除此之外的调用 setState 那么就会立即同步 this.state 。所谓“除此之外”,指的是绕过 React 通过 addEventListener 直接添加的事件处理函数,还有通过 setTimeout/setInterval 产生的异步调用。
原因是在 React 的 setState 实现中,会根据一个?isBatchingUpdates 的变量判断是直接更新 this.state 还是放到队列里回头再说,isBatchingUpdates 的默认值是 false 会立即同步 this.State ,但是 React 中在调用事件处理函数之前,会调用一个叫?batchedUpdates 的函数。他会修改 isBatchingUpdates 的值为 true ,所以就不会立即执行。