作者回复: 👍
作者回复: 场景1 bcd 是不同类型的节点,如 分别是span div p 三种类型 场景4是三个同类型节点,只是传递的属性不一致
作者回复: 应该是子组件有自己的状态的时候,就是data。
他们和key本身没关系,但是如果你用了index作为key,当出现删除,排序后,状态就和你的预期不一样了,如 A1 A2 内部分别有自己的状态message 1和2 如果拿index做为key,逆序后变成A2 A1 但A2的message就变成了1 A1的message变成了2
作者回复: 你所谓的树形结构的移动之所以高是在查找上,但虚拟dom只做同级比对,移动也只存在同级移动,所以并不高,第二点,的确是先对比的类型
作者回复: 并不可以, key需要的是一个静态唯一值 如果没有静态唯一值,可以自己生成
作者回复: 脑补不出来你的问题 😓
作者回复: 建议查看下输出日志实际体会下,使用场景就是只要节点是动态的(有时有,有时无,有时顺序会变),这种情况下都要用key 反之可以不用
作者回复: 还有很多好玩的 😄 感谢支持
作者回复: 对 仅限于同层比较
作者回复: 对,的确要差一些,最终都是要操作dom的,当然也分场景,但是框架是在性能和开发效率之间找到一个平衡点
作者回复: 仅支持ie9及以上
作者回复: 理解vue的更新机制,提升组件的渲染性能,尤其是key的作用,除了性能,还有避免因为key的不稳定导致的bug
作者回复: 如果说就是你给出的div li而言,用index作为key,并不会引入bug。但如果是自定义组件,就不要这么用了。还有你这个两层key没有任何意义,虚拟dom只会同层比对
作者回复: 对,不止删除,添加、排序,都会出现不符合预期的情况,主要是子组件有自己的状态的时候
作者回复: 删除多个倒不会,只是真正被删除的那个却不是我们想要删除的那个 对于普通元素倒还好,因为都是纯显示的,但如果是自定义组件,而组件内还维护着自己的状态,那么状态就乱了
作者回复: 1. 简单列表不用key没问题,但“就地复用”并不是最高效的模式,而且有一定限制(只适用于不依赖子组件状态或临时 DOM 状态的列表渲染输出),所以推荐能用key的还是用key,但如果真的没有key,可以不用
2. 这是一方面,但即便没有多个数据项循环,依然也是有问题的 如前面提到的,依赖子组件状态的情况下,如果用了index作为key,会发生什么