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 的时候

0
0

Vue.js 源码深入解析 深入理解Vue实现原理

全方位讲解 Vue.js 源码,进阶高级工程师

4984 学习 · 1037 问题

查看课程