React 中的虚拟 DOM(Virtual DOM)是一种抽象的、轻量级的 JavaScript 对象树,它是对真实 DOM 的一种内存中的表示。虚拟 DOM 通过在内存中维护一个树状结构,记录了组件的层次结构、属性和状态,以及如何将这些组件映射到真实的浏览器 DOM。通过比较前后两次虚拟 DOM 的差异,React 可以最小化对真实 DOM 的操作,从而提高性能和效率。
工作流程:
-
渲染阶段: 当组件的状态发生变化时,React 使用虚拟 DOM 来重新渲染整个组件树,生成新的虚拟 DOM。
-
Diffing 阶段: React 使用算法来比较前后两个虚拟 DOM 的差异,找出需要更新的部分。这个过程称为 Diffing(差异计算)。
-
更新阶段: React 根据 Diffing 的结果,只更新需要更新的部分到真实 DOM 中,而不是重新渲染整个组件树。
key属性的作用:
它用于帮助 React 识别每个虚拟 DOM 节点的唯一性,并优化 Diffing 的效率。key
是在组件列表中为每个子元素分配的唯一标识符。当组件列表发生变化时,React 使用 key
来判断哪些子元素是新增、删除或重排的。
diff和key之间的关系:
-
提供唯一性标识:
key
属性为虚拟 DOM 中的元素提供了唯一性标识,使 React 能够识别每个元素的变化。 -
优化更新: 在 Diffing 过程中,React 使用
key
来判断哪些元素是新增、删除或移动的,从而避免不必要的更新操作。 -
减少 DOM 操作: 如果没有正确使用
key
,可能会导致错误的元素重排,增加 DOM 操作的复杂性和成本。