美文网首页
React 中 setState 并非都是异步

React 中 setState 并非都是异步

作者: Allan要做活神仙 | 来源:发表于2019-03-28 12:17 被阅读0次

    2019-03-28-12:03:于公司

    setState通常大家都认为是异步的,那就呵呵了。

    在 React 中,如果是由 React 引发的事件处理(比如通过 onClick 引发的事件处理),调用 setState 不会同步更新 this.state,除此之外的 setState 调用会同步执行 this.state
    多个state会合成到一起进行批量更新

    所谓“除此之外”,通过 addEventListener 直接添加的事件处理函数,还有通过 setTimeout/setInterval 产生的异步调用。

    原因:

    在 React 的 setState 函数实现中,会根据一个变量 isBatchingUpdates 判断是直接更新 this.state 还是放到队列中回头再说。

    isBatchingUpdates 默认是 false,也就表示 setState 会同步更新 this.state,但是,有一个函数 batchedUpdates,这个函数会把 isBatchingUpdates 修改为true,而当 React 在调用事件处理函数之前就会调用这个 batchedUpdates,造成的后果就是由 React 控制的事件处理过程 setState 不会同步更新 this.state

    相关文章

      网友评论

          本文标题:React 中 setState 并非都是异步

          本文链接:https://www.haomeiwen.com/subject/hbcqbqtx.html