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都发生了改变,要重新渲染
