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#
全部评论

相关推荐

求offer的大角牛:不吃香菜
点赞 评论 收藏
分享
05-09 12:23
已编辑
华南理工大学 Java
野猪不是猪🐗:给他装的,双九+有实习的能看的上这种厂我直接吃⑨✌们拿它练练面试愣是给他整出幻觉了
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客企业服务