今天在写项目时,写到一个嵌套评论的遍历时,控制台出现了一个报错信息,但是并不影响页面的渲染,然后一看这个错的原因是 key值重复,那么问题的解决方式就很简单了。(vue for循环读取key值时, key需要是唯一的,如果key值重复会导致报错,影响页面渲染卡顿。)
① 原代码:
<div v-for="item in commentList" :key="item.id">
<img :src="item.avatar" alt="" >
<div style="flex: 1">
<!--一级评论-->
<div style="margin-bottom: 10px">
<div >{{ item.userName }}</div>
<div >{{ item.content }}</div>
<div >{{ item.time }}</div>
</div>
<!--子级评论-->
<div v-for="sub in item.children" :key="sub.id">
<img :src="sub.avatar" alt="" >
<div >
<div >{{ sub.userName }} <span v-if="sub.replyUser !== item.userName">回复 {{ sub.replyUser }}</span></div>
<div>{{ sub.content }}</div>
<div >{{ sub.time }}</div>
</div>
</div>
</div>
</div>
② 新代码:
<div v-for="item in commentList" :key="item.id">
<img :src="item.avatar" alt="" >
<div style="flex: 1">
<!--一级评论-->
<div style="margin-bottom: 10px">
<div >{{ item.userName }}</div>
<div >{{ item.content }}</div>
<div >{{ item.time }}</div>
</div>
<!--子级评论-->
<div v-for="(sub,i) in item.children" :key="sub.id+i">
<img :src="sub.avatar" alt="" >
<div >
<div >{{ sub.userName }} <span v-if="sub.replyUser !== item.userName">回复 {{ sub.replyUser }}</span></div>
<div>{{ sub.content }}</div>
<div >{{ sub.time }}</div>
</div>
</div>
</div>
</div>
为什么for循环后要加key值,否则会爆红,会产生什么影响?
for循环读取key值时, key需要是唯一的,如果key值重复会导致报错,影响页面渲染卡顿。
解决方式
只需要遍历时将key加上一个随机值即可,最简单就是同时遍历出索引与key相加
<div v-for="(item, i) in items2" :key="'A'+ i"></div>