雷火面试的时候面试官问了这个问题,一直觉得自己应该算了解的。结果表达了白天没说清楚,今天写个文章好好梳理下。
先说结论:
- react控制的事件处理程序(事件合成||生命周期),是异步的
- 原生事件 || 异步函数中,都是同步调用的
关于setstate的异步:
- setstate 函数中isBatchingUpdates变量是判断是否加入队列,回头再说。
- 默认情况是false:同步调用
- 但遇到react控制的事件函数会调用batchedUpdates,会被isBatchingUpdates改为true,即变成异步调用。
- 异步是代码层面的异步,即状态更新加入队列,合成事件和钩子函数没法立刻拿到值。