初始代码:
<div id="app"> <div v-for="i in dataList">{{ i }}</div> </div> var vm = new Vue({ el: '#app', data: { dataList: [1, 2, 3, 4, 5] } })
有无key一样:
vm.dataList = [4, 1, 3, 5, 2] // 数据位置替换 // 没有key的情况, 节点位置不变,但是节点innerText内容更新了 [ '<div>4</div>', // id: A '<div>1</div>', // id: B '<div>3</div>', // id: C '<div>5</div>', // id: D '<div>2</div>' // id: E ] // 有key的情况,dom节点位置进行了交换,但是内容没有更新 // <div v-for="i in dataList" :key='i'>{{ i }}</div> [ '<div>4</div>', // id: D '<div>1</div>', // id: A '<div>3</div>', // id: C '<div>5</div>', // id: E '<div>2</div>' // id: B ]
有key反倒不是太好:
vm.dataList = [3, 4, 5, 6, 7] // 数据进行增删 // 1. 没有key的情况, 节点位置不变,内容也更新了 [ '<div>3</div>', // id: A '<div>4</div>', // id: B '<div>5</div>', // id: C '<div>6</div>', // id: D '<div>7</div>' // id: E ] // 2. 有key的情况, 节点删除了 A, B 节点,新增了 F, G 节点 // <div v-for="i in dataList" :key='i'>{{ i }}</div> [ '<div>3</div>', // id: C '<div>4</div>', // id: D '<div>5</div>', // id: E '<div>6</div>', // id: F '<div>7</div>' // id: G ]