diff算法特点
diff算法特点:
同层对比:分为三种类型对比(虚拟DOM树对比、组件的对比、列表元素的对比)
a. 虚拟DOM树的diff算法对比
- 同城对比标签名称、标签属性、标签内容是否一致;不会跨层级对比
- 如果虚拟DOM出现跨层级移动,React直接将旧层级删除,在新的节点下创建新的层级元素。不会复用旧的DOM层级
b. 组件的diff算法对比(结合动态组件)
- 如果在重复render()生成虚拟DOM时,组件没有发生变化,此时组件就相当于固定的DOM树了,只是封装了一个组件而已。参照DOM树的diff算法对比规则。
- 如果组件是动态切换的,React直接放弃对比,哪怕两个组件的结构是一样的,直接将消失的组件溢出,出现的组件再创建新的组件DOM节点。(谁出现就创建谁,谁消失就销毁谁)
c. 列表元素的diff算法对比
- 没有key属性的时候,React对比新旧虚拟DOM时,会按照元素顺序对比元素内容是否发生变化,变化了就重新生成DOM。
- 有key属性的时候,React对比新旧虚拟DOM时,会将两个key值相同的元素进行对比,看看元素内容是否变化,变化了就重新生成DOM。
浙公网安备 33010602011771号