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

相关推荐

5.10下午三点半  部门腾讯会议1.自我介绍2.项目难点(挖坑)3.为什么调用useEffect会陷入无限循环?4.react hooks用过哪些?5.用过useMemo和useCallback吗?6.对context有什么认知?7.用过context吗?(答用过)8.context使用的时候外层需要用provider包着,如果我在创建context的时候下面直接获取context的值能获取到吗?9.说说useMemo或者useCallback10.封装了axios拦截器,怎么封装的?11.context和redux的区别,在什么场景下用context,什么场景下用redux?12.怎么减少render次数,或者说如何减少组件重绘的次数?13.对js了解多吗?14.说说原型链?15.继承的方式有哪些?16.讲一下寄生组合继承?17.讲一下函数作用域?18.css用的多吗?19.样式隐藏有很多方法,区别在哪里?20.对浏览器的渲染机制了解吗,比如页面打开是怎么去渲染的?21.重绘回流知道吗,讲一下22.减少回流?23.js减少回流?24.网页的性能优化,页面打开需要3s以上,这个是无法接受的,怎么优化?25.为什么不太建议大型项目用服务器渲染?(早上美团面试官刚给我解答哈哈哈)26.如果本身就是大型项目用了服务器渲染,不能改变基础框架,怎么做服务器端的优化,减少服务器的压力?27.手撕:力扣原题:版本号对比反问:1.一般用什么框架多一些?(他们部门是做腾讯会议的,主要是react,也有可能做vue)2.我的回答有没有什么比较大的错误,或者说对我有没有什么建议(基础这一块学的有点浅)
腾讯云智研发一面66人在聊 查看27道真题和解析
点赞 评论 收藏
转发
1 1 评论
分享
牛客网
牛客企业服务