什么是差异算法?
React 使用虚拟 DOM,它是 DOM 的轻量级版本。唯一的区别是能够像真实 DOM 一样编写屏幕,实际上每次重新渲染后都会创建一个新的虚拟 DOM。 DOM 以树状结构存储网站的组件。
React 中的 DOM 更新方式:
- 第一次运行时,创建了虚拟 DOM 和真实 DOM 树
- React 适用于可观察模式,因此,每当状态发生变化时,它都会更新虚拟 DOM 中的节点
- 然后,react 将虚拟 DOM 与真实 DOM 进行比较并更新更改。这个过程称为和解。
React 基于以下假设使用称为 Diffing 算法的启发式算法进行协调:
- 不同类型的元素会产生不同的树
- 我们可以设置哪些元素是静态的,不需要检查。
React 检查根元素的变化,更新取决于根元素的类型,
- 不同类型的元素:每当根中元素的类型发生变化时,react 将废弃旧树并构建新树,即完全重建树。
- 相同类型的元素:当改变元素的类型相同时,React 会检查两个版本的属性,然后只更新有变化的节点,而树中没有任何变化。该组件将在下一个生命周期调用中更新。
注意:这就是为什么我们应该始终在元素中使用唯一键的原因,以便 React 可以轻松地确定元素的变化。