v-if 组件重复问题

727 阅读1分钟

参考文章:blog.csdn.net/weixin_4568…

写在最前面 | Vue源码系列-Vue中文社区 (vue-js.com)

问题

有两个item-wrap 第一个item-wrap有四个item,第二个item-wrap有三个item。结果发现item-wrap里使用的组件是重复的,即第二个item-wrap的三个item使用的是第一个item-wrap的前三个

问题复现

1.data中设置一个name属性作为唯一值,在mounted中为其赋值

image.png
image.png

2.监听其状态

image.png

3.切换item-wrap,查看其状态。可以看到 切换第二个item-wrap时,其值都是第一个item-wrap的组件标识

image.png

4.给组件添加key值

image.png

5.再次查看状态 item-wrap-2 -> item-wrap-1 -> item-wrap-2,可以看到,每一个值都不一样,他会重新渲染这个组件

image.png

结论

在使用v-if的时候,vue会在生成vnode的时候选择性的忽略它不进行渲染,如果在不加入key的情况下。vue会识别不出相似的组件导致不重新渲染等问题。增加key值可以增加该组件的唯一性帮助vue对其进行正常的操作