从源码的角度看 React JS 中批量更新 State 的策略(上)

Posted DevOpenClub

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从源码的角度看 React JS 中批量更新 State 的策略(上)相关的知识,希望对你有一定的参考价值。


在之前的文章「」与 「」 中,我们分别看到了 React JS 中 setState 的异步表现,并从源码的角度简单地了解了 React 中 setState 的设计结构以及原理。

这篇文章继上篇文章后,继续从源码的角度来了解 React 中对 State 批量更新策略的定义。

同样,源码的部分为了保证格式正常就直接截图了,查看源码点击「阅读原文」在博客中点击对应的链接直接跳转至 GitHub 查看即可。


1. setState 的源码实现


在 setState 的源码实现中,传递过来的参数就被定义成了 partialState,从参数名以及参数的说明中就可以看到,这只是 state 的一部分。
默认都会调用 this.updater.enqueueSetState(this, partialState) 将 state 放进更新队列中去。
而如果有传递回调函数过来的话,会执行 this.updater.enqueueCallback(this, callback),涉及到回调函数的部分,我们后续文章会继续进行分析。


2. 更新队列 ReactUpdateQueue 的定义


在上面的 setState 定义中,我们可以看到有一个 updater 的调用。
具体的定义如下。

从源码的角度看 React JS 中批量更新 State 的策略(上)

而初始的 updater 的定义如下。

从源码的角度看 React JS 中批量更新 State 的策略(上)

这样最终的更新队列都指向了 ReactUpdateQueue 的源码定义中。


3. ReactUpdateQueue 中的 enqueueSetState


我们可以看到 ReactUpdateQueue 中的 enqueueSetState 的定义。


从源码的角度看 React JS 中批量更新 State 的策略(上)


继续去跟 enqueueUpdate(internalInstance) 的实现。

从源码的角度看 React JS 中批量更新 State 的策略(上)


4. ReactUpdates 中的 enqueueUpdate


到这里,我们回到了上篇文章看到 ReactUpdates 的位置。

从源码的角度看 React JS 中批量更新 State 的策略(上)

我们继续看函数开始的部分,注入的两个部分。

从源码的角度看 React JS 中批量更新 State 的策略(上)

注入了两个部分,ReactReconcileTransaction 以及 batchingStrategy

ReactReconcileTransaction 主要用于在更新 state 时,页面 UI 元素的修正以及在执行生命周期函数时,处理好生命周期函数与其他用户自定义函数之间的执行顺序与逻辑,具体的实现可以参考它的源码。

到这里,我们从 setState 的定义开始,梳理好了在进行更新策略前的逻辑部分,下篇文章,我们将直达 batchingStrategy 的内部实现,看看 React 的更新逻辑策略的实现。



加入 DevOpenClub Pro 知识星球

高质量、有价值的交流社区永远都不会是你所在的 QQ 群或者微信群;

获取每年所有原创开发视频教程的第一手更新;

每日分享高质量的国外技术开发头条信息与资源;

获取 [学软件开发 & 学英语] 相关国外超清视频的第一手百度云更新;

获取百度云中分享的超清视频课程以及源码等相关资料;

获取其他高质量软件开发行业新闻、技术文章、教学视频分享;

第一时间获取视频更新提醒及观看密码;

遇到相关技术问题可以进行快速提问以及讨论交流;

群中认识更多的朋友以及合作开发项目的机会;

认识更多的行业朋友,或者交流自己的创业小项目。





以上是关于从源码的角度看 React JS 中批量更新 State 的策略(上)的主要内容,如果未能解决你的问题,请参考以下文章

从Vue.js源码角度再看数据绑定

从Vue.js源码角度再看数据绑定

从template到DOM(Vue.js源码角度看内部运行机制)

从template到DOM(Vue.js源码角度看内部运行机制)

从Vue源码角度再看数据绑定

从Vue.js源码看异步更新DOM策略及nextTick