setstate是同步还是异步?

185 阅读1分钟

雷火面试的时候面试官问了这个问题,一直觉得自己应该算了解的。结果表达了白天没说清楚,今天写个文章好好梳理下。

先说结论:

  1. react控制的事件处理程序(事件合成||生命周期),是异步的
  2. 原生事件 || 异步函数中,都是同步调用的

关于setstate的异步:

  • setstate 函数中isBatchingUpdates变量是判断是否加入队列,回头再说。
  • 默认情况是false:同步调用
  • 但遇到react控制的事件函数会调用batchedUpdates,会被isBatchingUpdates改为true,即变成异步调用。
  • 异步是代码层面的异步,即状态更新加入队列,合成事件和钩子函数没法立刻拿到值。