vue通过v-for循环多次子组件,改变组件的个数,组件相互干扰

父组件通过数组v-for循环可以动态的添加、删除组件

<li v-for="(item, index) in personCheckList" :key="index" :data-key="item.key">
      <work-zong-jie v-if="item.value === 'workZongJie'" :record="item" ref="workZongJieRef"></work-zong-jie>
</li>

删除最后一个组件,不会出现任何问题,但是,当我们删除第一个,第二个组件的时候,就会出现data值之间的相互干扰,并且,组件的唯一key值,却是并未删除出错,后台打印的数据,也是没有任何问题
组件添加.png

删除key:1793的组件之后的效果.png

这就会发生一个比较有趣的事情,所对应的key组件确实删除了,没有任何问题,但是,组件里面的data值会改成第一个组件的值,查阅了很多资料发现是v-for的key出现了问题。一般写v-for组件的时候,我都习惯性的将index值赋值给key。但是,当我删除第一个组件的时候key为0,数组的第二个组件的key也会变成0,所以,因为key的赋值,导致数组的删除出现了data的值的混淆,代码修改如下:

<li v-for="item in personCheckList" :key="item.key" :data-key="item.key">
      <work-zong-jie v-if="item.value === 'workZongJie'" :record="item" ref="workZongJieRef"></work-zong-jie>
</li>

key值说明:
key的作用主要是为了高效的更新虚拟DOM。另外vue中在使用相同标签名元素的过渡切换时,也会使用到key属性,其目的也是为了让vue可以区分它们。v-for首次循环显示时给每个子元素加一个唯一的key,在页面刷新或者DOM改变时就会通过之前的key快速将其渲染出来

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容