一句话总结
- 在 React 的生命周期函数以及合成事件执行前,都会有一个隐形变量 isBatchingUpdates 变成true,结束时候变成 false,它决定了setState 到底是同步还是异步。所有在 isBatchingUpdates 变成 false 前执行的 setState 都是异步,因为它需要等待dom更新回来才会改变。
-
同样如果isBatchingUpdates变成false之前,setState同一个变量,那么只会执行最后一个。
- useState 同理
- 如果像下面这个例子,这里跟setState会有区别,每一次setX react 都会处理,而 setState 只会处理最后一个。
const [x, setX] = useState(0)
const click = () => {
setX(x => x + 1)
setX(x => x + 1)
}