在 React 的生命周期以及绑定的事件流中,所有的 setState
操作会先缓存到一个队列中,在整个事件结束后或者 mount 流程结束后,才会取出之前缓存的 setState
队列进行一次计算,触发 state 更新。只要我们跳出 React 的事件流或者生命周期,就能打破 React 对 setState
的掌控。最简单的方法,就是把 setState
放到 setTimeout
的匿名函数中。
setState
本质上还是在一个事件循环中,并没有切换到另外宏任务或者微任务中,在运行上是基于同步代码实现,只是行为上看起来像异步