setState是同步还是异步?
这是一道非常高频的react面试题,但是大多数的前端要么回答不完整,要么回答不深入。老规矩,点赞收藏支持一下,给我一分钟,理想哥教你该怎么满分回答这个问题。
如果我是求职者,我会这么回答:
setState是同步还是异步?需要区分react 18之前和之后两种情况。
在react 18之前,源码中executionContext字段代表着目前任务所处的阶段,如果executionContext被赋值,代表着该任务进入到了react 的调度流程中,此时react会对该任务进行异步处理,就是我们常说的批量处理,如果executionContext没有被赋值,代表着该任务没有进入到react 的调度流程,此时react会对该任务进行同步处理。
setTimeout、setInterval等原生事件都不会进入到react的调度流程,所以是同步处理,而合成事件,都会进入到react 的调度流程,所以会异步处理。
从react 18开始,当你使用createRoot创建应用后,不管是原生事件还是合成事件,所有的事件都会自动进行异步处理了,但是如果你还是依然使用render进行渲染,那么,事件流程还是和react 18之前的机制一样。
以上就是这个问题的回答了,大家可以下次面试时试试这么回答看看效果。
最后,欢迎关注理想哥,每天学点前端面试小技巧。
#前端##前端面试##react#