返回
React 笔记 (15):ReactDOM.render(中)
前端
2023-09-08 04:11:53
各位好,欢迎继续和 AI 螺旋一起学习关于 React 的相关知识。在上一章中,我们对 ReactDOM.render 的调用链路及其对应的初始化阶段的工作内容进行了解和掌握。在这一章里,我们就来学习一下后续的 render 阶段和 commit 阶段。
需要特别注意的是,render 阶段可以被认为是整个渲染链路中最为核心的一环。我们反复强调的“找不同”过程,恰恰发生在这个阶段,因此这一章内容非常值得各位深入理解。
ReactDOM.render 的后续工作
上一章中,我们已经对 ReactDOM.render 的调用链路和初始化阶段做了详细讲解。在这里,我们就接着来分析 render 阶段和 commit 阶段的主要工作内容。
1. render 阶段
在 render 阶段,会发生许多重要的事件。首先,React 会根据组件的 state 和 props,创建出对应的虚拟 DOM(Virtual DOM)。虚拟 DOM 是一个轻量级的 DOM,它只保存了 DOM 的必要信息,与真实的 DOM 相比,它具有以下几个优势:
- 创建快:因为虚拟 DOM 只保存了 DOM 的必要信息,所以它比真实的 DOM 要轻量得多,因此创建速度也更快。
- 更新快:虚拟 DOM 只需更新与上次状态不同的部分,而不是整个 DOM,因此更新速度也更快。
- 跨平台:虚拟 DOM 是平台无关的,这意味着它可以在任何平台上运行。
虚拟 DOM 创建完成后,React 会将其与之前的虚拟 DOM 进行对比,找出差异的部分。差异的部分会通过 diff 算法来计算出来,该算法能够快速地找到两个虚拟 DOM 之间的差异,并且只更新差异的部分。
2. commit 阶段
在 commit 阶段,React 会将差异的部分更新到真实的 DOM 中。这是一个相对简单直接的过程,但也需要特别注意以下几点:
- 尽量减少对真实 DOM 的操作 :真实的 DOM 是一个非常耗费性能的结构,因此我们应该尽量减少对它的操作。
- 批处理更新 :在 React 中,所有的更新都会被批处理,这可以有效减少对真实 DOM 的操作次数,从而提高性能。
- 使用事务 :在 React 中,所有的更新都会在一个事务中执行,这可以保证更新的原子性和一致性。
结语
至此,我们就对 ReactDOM.render 的调用链路、初始化阶段、render 阶段和 commit 阶段的工作内容有了全面的了解。这些内容对于理解 React 的工作原理非常重要,希望各位能够认真学习并掌握。