Vue技术

关于vue和React的diff算法以及key的用途

2022-04-12  本文已影响0人  darkTi

这次我们先说结论,两者有什么区别
1、children节点对比时,React是从左到右遍历对比,vue是从双端交叉进行对比;
2、Vue的整体效率会比React高一些,比方说这个场景下:加入有多个子节点,我只是把最后一个节点移到了第一个
①React是需要借助 Map来匹配key,再复用节点;
②Vue会发现移动,直接去复用节点;

Vue diff

patchVnode
updateChildren(elm, oldCh, ch)

React diff

1、首先对比两棵树的根节点
i. 如果根节点的类型改变了,比如 div 变成了 p,那么直接认为整棵树都变了,不再对比子节点。此时直接删除对应的真实 DOM 树,创建新的真实DOM 树。
ii. 如果根节点的类型没变,就看看属性变了没有
a. 如果没变,就保留对应的真实节点
b. 如果变了,就只更新该节点的属性,不重新创建节点。

2、然后同时遍历两棵树的子节点,从左到右遍历对比(这就是与vue的双端交叉对比不同的地方),每个节点的对比过程同上。
ⅰ. 当子节点上都没有key的时候,那么每个节点的对比过程与跟节点的对比过程一致;
ⅱ. 当子节点上有key的时候
它会把变化的那个节点以及后面的节点全部暂存在map里,后面的节点就先从桶里进行key的匹配,没有匹配到的节点就创建它,匹配到就复用,有key剩下来了就删除它

对于key的用途

上一篇 下一篇

猜你喜欢

热点阅读