• 错误描述:Duplicate keys detected. This may cause an update error.
  • 错误直译:检测到重复的键。这可能会导致错误。
  • 错误原因:有相同父元素的多个子元素的v-for有相同的key值。

错误重现步骤:

dataList: [
            { id: 1, name: 'A' },
            { id: 2, name: 'B' },
            { id: 3, name: 'C' }
          ]
<span v-for="(item, index) in dataList" :key="index">{{item.name}}</span>
<hr />  <!-- 分割线 -->
<span v-for="(item, index) in dataList" :key="index">{{item.name}}</span>

可以看到控制台把所有重复的key都打出来了。因为这里我们遍历使用的key是它的 index ,也就是它的索引 0,1,2 ,所以共有2对 0,1,2 这样的index ,就出现重复了。

  • 解决方法
    (1)将其中一个的key修改一下:
<span v-for="(item, index) in dataList" :key="index">{{item.name}}</span>
<hr />  <!-- 分割线 -->
<span v-for="(item, index) in dataList" :key=`abc-${index}`>{{item.name}}</span>

这里将第二个便利中的key加上了前缀 abc,这样一来它的key就为 abc-0 ,abc-1 ,abc-2 了 ,不会与上面的0,1,2 重复了。
(2)将它们放到不同的父元素下

<span v-for="(item, index) in dataList" :key="index">{{item.name}}</span>
<hr />  <!-- 分割线 -->
<div class="my-container">
    <span v-for="(item, index) in dataList" :key=index>{{item.name}}</span>
</div>
  • 总结:
    有相同父元素的子元素的key必须保持唯一性,重复的key会造成渲染错误。
    要保持key的唯一性,一般使用唯一标识 id 来作为key。
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐