key的作用主要是为了更高效的更新虚拟Dom.
vue在patch过程中判断两个节点是否是相同节点key是一个必要条件,渲染一组列表时,key往往是唯一标识;所以如果不定义key的话,vue只能认为比较的两个节点是同一个,哪怕实际上不是,这导致频繁更新元素,使的整个patch过程比较低效影响性能
实际使用中在渲染一组列表时key必须设置,而且必须是唯一标识,应该避免使用数组索引作为key,这可能导致一些隐藏的bug;vue中在使用相同标签元素过渡切换时,也会使用key属性,其目的也是为了让key可以区分他们,否则vue只会替换其内部属性,而不会触发过渡效果
vue判断两个节点是否相同,同时判断两者的key和元素类型等,因此如果不设置key,它的值就是undefined,则可能永远认为这是两个相同节点,只能做更新操作,这造成大量的dom操作 不可取