Vue项目时为什么要在列表组件中写key,其作用是什么?
不带有key,并且使用简单的模板,基于这个前提下,可以更有效的复用节点,diff速度来看也是不带key更加快速的,因为带key在增删节点上有耗时,这就是vue文档所说的默认模式。但是这个并不是key作用,而是没有key的情况下可以对节点就地复用,提到性能。
这种模式会带来一些隐藏的副作用,比如可能不会产生过渡效果,或者在某些节点有绑定数据(表单)状态,会出现错位,Vue文档也说明了这个默认的模式是高效的,但是只是用于不依赖子组件状态或临时DOM状态(例如:表单输入值)的列表渲染输出。
1. 避免对接点【就地复用】
2. key相当于每个vnode的唯一id,我们可以依靠key,更快更精确的知道oldVnode中对应的vnode节点
key的作用是什么?
key是给每一个vnode的唯一id,可以依赖key,更准确,更快的拿到oldVnode中对应的vnode节点。
1. 更准确
因为带key就不是就地复用了,在someNode函数a.key === b.key对比中可以避免就地复用的情况,所以会更加准确。
2.更快
利用key的唯一性生成map对象来获取对应的节点,比遍历方式更快。
项目中实际遇到的问题
如果没有添加key值,v-for列表进行增删改时会导致列表顺序混乱。