浅谈 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 异步同步问题的主要内容,如果未能解决你的问题,请参考以下文章