关于不使用key的问题

来源:4-13 深入diff算法源码-updateChildren函数

fy000

2020-03-04

双越老师,这几个章节diff算法很给力,算是看到的所有视频或者资料里面最详细的了,自己阅读vue的diff,经常被细枝末节带走,陷进去,老师的这几章真的是很清晰(一如既往)

有个问题可能表述的不准确:
视频最后 老师列举了 for循环 ABCD,不带key的情况,会删除旧的 插入新的
但是vue的v-for好像不是这样,因为 如果不带key会有默认的就地复用策略:
图片描述

图片描述

所以 我认为 写key的作用:

  1. diff算法找到相同的vNode,性能好 更快,不需要删除插入
  2. 保证唯一性(避免就地复用状态 例如 visit状态带来的影响)
写回答

2回答

慕粉3871079

2021-02-23

那就地更新与移动更新哪种更高效呢

0
1
双越
这些细节我也没研究,我觉得没必要研究这个,有这些时间精力我宁可去做别的事情。同理,面试去问这些细节,回报率也很低。
2021-02-23
共1条回复

双越

2020-03-04

讲课时可能不能去深入每个框架对 key 的处理细节,要不然复杂度就太高了,大家估计都得听乱了。

diff 算法本身就是一个挺大的范围,key 是其中一个,所以能把 key 的核心价值介绍清楚,就已经可以满足课程目标的需要,满足面试的需要。

不过,你自己去深入的挖掘了细节,这个还是要点赞的,加油!

0
1
jie_wu
老师,最后总结不使用key会全部删除重建,是不是不太对?前面说不使用key默认是undefined==undefined,这样也就是两者是相同的DOM,直接进行修改,感觉这样才能和v-for就地更新策略相契合呀
2021-04-12
共1条回复

2024版 前端框架及项目面试 聚焦Vue3/React/Webpack

面向1-3年前端的框架及项目面试“刚需内容”

4664 学习 · 1644 问题

查看课程