當在組件中使用 v-for 時,key 現在是必須的。
首先,為了方便演示。我們先搭建一個基礎結構

現在我們目前添加的是用的 push 方法,添加到了對象的尾部
在添加之前選中了第五個后再添加也不會出現上面異常

接下來我們再來看看如果是使用 unshift 方法,是添加到對象前面的

我們可以看到如果在添加之前選中了其中一項,后再添加就會出現索引錯位的現象

所以我們需要給對象里面的每一項都綁定上一個唯一的標識
這個時候就可以用到我們的這個 key 了

綁定好之后我們再來看一下

現在可以看到我們沒有添加新用戶之前,我們選中了 5號,添加之后選中的還是 5號
附上完整代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="app">
<div>
<label>Id:
<input type="text" v-model='id'>
</label>
<label>Name:
<input type="text" v-model='name'>
</label>
<input type="button" value="添加" @click='add'>
</div>
<p v-for='item in list' v-bind:key='item.id'>
<input type="checkbox">{{ item.id }} --- {{ item.name }}
</p>
</div>
<script src="../vue/vue.js"></script>
<script>
var vm = new Vue({
el: '#app',
data: {
id: '',
name: '',
list: [{
id: 1,
name: '勒布朗'
}, {
id: 2,
name: '杜蘭特'
}, {
id: 3,
name: '庫里'
}, {
id: 4,
name: '羅斯'
}, {
id: 5,
name: '喬治'
}]
},
methods: {
add(){
this.list.unshift({id: this.id, name: this.name})
}
}
})
</script>
</body>
</html>
