vue - [Vue warn]: Duplicate keys detected: ‘0‘. This may cause an update error.
问题描述:
vue项目中,对表单数组赋值时,控制台抛出警告:
问题代码:
问题分析:
1、Vue 要求每个虚拟 DOM 节点必须有唯一的 key。该警告信息通常出现在使用v-for循环的场景中,多个同级节点使用了相同的key作为唯一标识,导致Vue无法识别。
2、问题代码中,外层表单el-form中,有两个同级的el-row列表,在对el-form进行赋值时,同时会对内层的这两个el-row列表进行赋值;此时这两个列表的元素,都使用了index,也就是列表的索引作为key,就会出现两个列表的第一个元素的key都是0,第二个元素的key又都是1。。。依次类推,不同的元素使用相同的key,就会出现冲突,从而产生了报警。
解决方法:
在使用v-for循环时,使用真正能够唯一标识元素的特征作为key,如下图:
注意:
这里两个列表分别使用了不相干的两个id字段作为元素的key,通常来说是没有问题的;但是如果有两行数据,一个使用的 payPlanId 是1001,而另一个使用的 relationId 恰好也是1001,此时仍然会触发警告。
所以判断是否重复key,不仅仅是key所使用的字段能够区别开,更重要的所产生的实际值不能重复。 如果遇到上述特殊情况产生了警告,可以手动拼接key使其值唯一,比如最后一个el-row,使用 :key=“prRelation-${item.relationId}
”。