题目解读

这个题目需要对框架的源码/原理有一定的理解。解答的时候更应该从源码角度出发而不是简单的回答概念性的东西。

先从文档开始说

key主要用在虚拟 DOM 算法中,在新旧 nodes 对比时辨识 VNodes。不用key会就地更新dom,而用了key会根据key的变化而重新排序。触发完整的生命周期和触发过渡。

然后转到源码分析

数据更新的时候会调用vm.update(),然后调用patch方法,
这个时候可以看一下源码,实际上会调用patch.js中的patchVnode()
patchVnode在没有children的时候会直接替换当前节点的content
而key得作用在有children的时候起作用,主要在寻找具体得node中
调用updateChildren的时候有key可以直接找到对应的node,没有key则会遍历旧的nodeList返回匹配上的或者是undefined,然后调用createEl/pathcVnode

总结

使用key可以更高效,更准确的找到对的dom