v-for内没有key的一点疑问
来源:5-9 组件更新(3)

qq_飞越疯人院_1
2019-08-22
为什么加上key
,我个人的理解是这样的:
在diff
比对内部做更新子节点时,会根据oldVnode
内没有处理的节点得到一个key
值和下标对应的对象集合,为的就是当处理vnode
每一个节点时,能快速查找该节点是否是已有的节点,从而提高整个diff
比对的性能。
但是源码里有一个
idxInOld = isDef(newStartVnode.key)
? oldKeyToIdx[newStartVnode.key]
: findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);
有key
最好就是查找了,没有的话不能识别节点和节点的区别,会一直走新第一个节点和旧第一个节点相同的逻辑,根本不会走到findIdxInOld
这个方法这,请问老师key
是为了增加性能还是为了还是增加准确性了?还有什么时候会走到findIdxInOld
这个方法里了?
写回答
1回答
-
ustbhuangyi
2019-08-23
key 主要作用就是区别 vnode。
至于走到 findIdxInOld,就是满足它的判断条件,newStartVnode 没设置 key 的时候00
相似问题