问题及解决办法
vue项目中偶尔会报这样一个错:Duplicate keys detected: '74004'. This may cause an update error
报这个错说明在你的 v-for
循环里,key
值可能重复了。
重复的 key
会造成渲染错误。
报错的原因是我一开始没有添加 key
属性,报错代码片段如下:
<template>
<vue-aplayer
:audio="audio"
:lrc-type="3"
:fixed='fixed'
:autoplay='autoplay'
:order='order'
:volume='volume'
:theme='theme'
:listFolded='listFolded '
/>
</template>
添加上key
之后不再报错
<template>
<vue-aplayer
:audio="audio"
:lrc-type="3"
:fixed='fixed'
:autoplay='autoplay'
:order='order'
:volume='volume'
:theme='theme'
:listFolded='listFolded '
:key="audio.name"
/>
</template>
说明:
audio
属性是我要遍历的列表,name
在我的列表中的主键,所以在这里我取audio.name
作为key
的值,key
的值必须是惟一的。
官方说明
key
-
预期:
number | string
key
的特殊属性主要用在 Vue 的虚拟 DOM 算法,在新旧 nodes 对比时辨识 VNodes。如果不使用 key,Vue 会使用一种最大限度减少动态元素并且尽可能的尝试就地修改/复用相同类型元素的算法。而使用 key 时,它会基于 key 的变化重新排列元素顺序,并且会移除 key 不存在的元素。有相同父元素的子元素必须有独特的 key。重复的 key 会造成渲染错误。
最常见的用例是结合
v-for
:<ul> <li v-for="item in items" :key="item.id">...</li> </ul>
它也可以用于强制替换元素/组件而不是重复使用它。当你遇到如下场景时它可能会很有用:
- 完整地触发组件的生命周期钩子
- 触发过渡
例如:
<transition> <span :key="text">{{ text }}</span> </transition>
当
text
发生改变时,<span>
总是会被替换而不是被修改,因此会触发过渡。
来源:oschina
链接:https://my.oschina.net/zhenggao/blog/3194873