千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

首页 视频教程 培训课程 师资团队 技术干货 常见问题 面试题 职场就业 零基础学Java 行业资讯
【热点话题】 Java技术干货 Java学习教程 Java学习笔记 Java面试题 Java培训问答 Java培训机构哪些好 Java职场就业
当前位置:Java培训  >  前端面试题  >  setState是同步还是异步

setState是同步还是异步

来源:千锋教育
发布人:qyf
时间: 2022-12-30 15:31:51 1672385511

setState是同步还是异步

  1. 在React的setState函数实现中,会根据一个变量isBatchingUpdates判断是直接更新 this.state还是放到一个updateQueue中延时更新,而 isBatchingUpdates默认是false,表示setState会同步更新this.state;但是,有一个函数batchedUpdates,该函数会把 isBatchingUpdates修改为true,而当React在调用事件处理函数之前就会先调用这个 batchedUpdates将isBatchingUpdates修改为true,这样由 React 控制的事件处理过程 setState不会同步更新this.state,而是异步的。

  2. 所以说setstate本身是同步的,一旦走了react内部的合并逻辑,放入了updateQueue队列中就变成异步了,而代码中的函数是react控制的,内部会走合并逻辑,所以这里的setState不但是合并的也是异步的

  3. 上面说了,setState是异步的原因是因为走了react内部的合并逻辑,那只要能绕过react内部的合并逻辑,不让它进入到updateQueue中不就变成同步了吗?因为setState()本身就是同步的

  4. 利用setTimeout绕过react内部的合并逻辑

  5. 异步的情况: 由React控制的事件处理函数,以及生命周期函数调用setState时表现为异步。大部分开发中用到的都是React封装的事件,比如onChange、onClick、onTouchMove等(合成事件中),这些事件处理函数中的setState都是异步处理的。

  同步的情况: React控制之外的事件中调用setState是同步更新的。比如原生js绑定的事件,setTimeout/setInterval,ajax,promise.then内等React无法掌控的APIs情况下,setState是同步更新state的

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

最新文章NEW

相关推荐HOT

更多>>