浅谈 setState 异步同步问题

Posted 拙慕JULY

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈 setState 异步同步问题相关的知识,希望对你有一定的参考价值。

setState 主流程


setState 无所谓 同步还是 异步,主要是看能不能命中 batchUpdate 机制,判断 isBatchingUpdates 的值,为 false 表示同步。

所有的 react 方法都会自动赋值一个 isBatchUpdates:

 increase1 = () => 
    // isBatchingUpdates = true; 异步
    this.setState(...)
    // isBatchingUpdates = false;
  

  increase2 = () => 
    // isBatchingUpdates = true; 异步
    setTimeout(() => 
      //  isBatchingUpdates = false;同步
      this.setState(...)
    , 200)
    // isBatchingUpdates = false;
  

哪些能命中 batchUpdate 机制?

react 可以「管理」的入口可以命中

  • 生命周期和他调用的函数;
  • react 中注册的事件和他调用的函数;

react 无法命中的、无法管理的入口无法命中

  • setTimeout 和 setInterval 和 它调用的函数
  • 自定义 DOM 事件和他调用的函数

transaction 事务机制

 // 开始 处于 batchUpdate 中
  // isBatchUpdates = true
  // do sth
  // 结束
  // isBatchUpdates = false

以上是关于浅谈 setState 异步同步问题的主要内容,如果未能解决你的问题,请参考以下文章

react中的setState到底是同步还是异步?

浅谈ReactVue 部分异步

setState是异步还是同步?

关于setState 异步 的一些问题

setState何时同步,何时异步,为什么?

setState是同步的还是异步的