不太理解key的重要性

来源:5-9 组件更新(3)

weixin_慕娘7037311

2020-07-11

看到老师在这篇回答
https://coding.imooc.com/learn/questiondetail/195765.html
中说了key的作用,但是我还是不太明白。

我自己花了一张图,这里我把 li3 删除掉。
图片描述
然后在updateChildren过程中,在 li3 与 li4 的比较时会进入 sameVnode(oldStartVnode, newStartVnode) 这个判断,然后 旧的 li3 节点会复用 li4 的 chlidren,然后 li3 仍然留在文档中。

老师说的会导致错误状态的复用是不是指 li3 本身的一些属性没有更新,还是沿用之前的,并且此时文档上的 li3 被错误的认为就是更新后的 li4?

我好像对key理解的还不够,希望老师能详细解答一下。

写回答

1回答

ustbhuangyi

2020-07-11

如果不用 key,你这个例子删除的虽然是 li3,但根据双端比较算法,li3 到 li4 会认为是同一个节点,然后执行 patchVnode,而 li4 被删除。最终的 DOM 就是 li1,li2,li3,而不是预期的  li1, li2,li4

0
2
前端工程师666777888
不加key,好像并没出现错误。 老师,能举个不加key,删除列表的一项后。出现错误的例子吗?
2021-04-08
共2条回复

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

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

4984 学习 · 1037 问题

查看课程