开发者社区> 问答> 正文

setState到底是异步还是同步?

展开
收起
前端问答 2019-12-01 22:23:52 830 0
1 条回答
写回答
取消 提交回答
  • 前端问答小助手

    先给出答案: 有时表现出异步,有时表现出同步

    1. setState只在合成事件和钩⼦函数中是“异步”的,在原⽣事件和setTimeout中都是同步的。

    2. setState的“异步”并不是说内部由异步代码实现,其实本身执⾏的过程和代码都是同步的,只是合成事件和钩⼦函数的调⽤顺序在更新之前,导致在合成事件和钩⼦函数中没法⽴⻢拿到更新后的值,形成了所谓的“异步”,当然可以通过第⼆个参数setState(partialState, callback)中的callback 拿到更新后的结果。

    3. setState的批量更新优化也是建⽴在“异步”(合成事件、钩⼦函数)之上的,在原⽣事件和setTimeout中不会批量更新,在“异步”中如果对同⼀个值进⾏多次setStatesetState的批量更新策略会对其进⾏覆盖,取最后⼀次的执⾏,如果是同时setState多个不同的值,在更新时会对其进⾏合并批量更新。

    2019-12-01 22:50:03
    赞同 1 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载