你理解key的作⽤吗?
VueJs 81
这是⼀道特别常⻅的问题,主要考查⼤家对虚拟DOM和patch细节的掌握程度,能够反映⾯试者理解层次。
思路分析:
- 给出结论,key的作⽤是⽤于优化patch性能
- key的必要性
- 实际使⽤⽅式
- 总结:可从源码层⾯描述⼀下vue如何判断两个节点是否相同
回答范例: - key的作⽤主要是为了更⾼效的更新虚拟DOM。
- vue在patch过程中判断两个节点是否是相同节点是key是⼀个必要条件,渲染⼀组列表时,key往往是唯⼀标
识,所以如果不定义key的话,vue只能认为⽐较的两个节点是同⼀个,哪怕它们实际上不是,这导致了频繁
更新元素,使得整个patch过程⽐较低效,影响性能。 - 实际使⽤中在渲染⼀组列表时key必须设置,⽽且必须是唯⼀标识,应该避免使⽤数组索引作为key,这可能
导致⼀些隐蔽的bug;vue中在使⽤相同标签元素过渡切换时,也会使⽤key属性,其⽬的也是为了让vue可以
区分它们,否则vue只会替换其内部属性⽽不会触发过渡效果。 - 从源码中可以知道,vue判断两个节点是否相同时主要判断两者的key和元素类型等,因此如果不设置key,
它的值就是undefined,则可能永远认为这是两个相同节点,只能去做更新操作,这造成了⼤量的dom更新
操作,明显是不可取的。
知其所以然
测试代码,test-v3.html
上⾯案例重现的是以下过程:

看到上面的图,大家应该知道key的作用很大啊哦。建议使用。