setState 到底异步还是同步?

一句话总结

  • 在 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)
}

你可能感兴趣的:(setState 到底异步还是同步?)