demo代码如下:
<template>
<div>
翻车现场,以下是数组
<button @click="reset">复原</button>
<button @click="deleteLast">删除最后一个元素</button>
<button @click="deleteSecond">删除第二个元素</button>
<ul>
<select>
<option v-for="(item, index) in targetArr" :key="index" value="">{{item.name}}</option>
<!-- <option v-for="item in targetArr" :key="item.id" value="">{{item.name}}</option> -->
</select>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
targetArr: [],
testData1: [
{
id: 1,
name: 'aaa',
},
{
id: 2,
name: 'bbb',
}, {
id: 3,
name: 'ccc',
}, {
id: 4,
name: 'ddd',
},
],
};
},
created() {
this.targetArr = JSON.parse(JSON.stringify(this.testData1));
},
mounted() {
},
methods: {
reset() {
this.targetArr = JSON.parse(JSON.stringify(this.testData1));
},
deleteLast() {
this.targetArr.pop();
},
deleteSecond() {
this.targetArr.splice(1, 1);
},
},
};
</script>
<style scoped lang="css">
</style>
bug复现步骤:
- 1、选择选择框,选到第三项 ccc
- 2、点击删除“第二个元素”
- 3、这个时候发现:选择框自动选到了第四项 ddd
使用index的缺点:
- 通常来说,只是显示不会有什么问题。但是如果有删除之类的操作,则可能出现上述bug。
- 果有删除之类的操作,会影响性能。因为删除列表中的一项后,数组各项的index都发生了改变,要重新渲染