在github上阅览README.md以得到最佳阅读体验,点这里html
v-for响应式key, index及item.id参数对v-bind:key值形成差别研究vue
一般状况下,咱们渲染一个li列表,采用v-for指令进行渲染,咱们须要给渲染的每一项元素绑定一个key值,其实绑定该key值是可选的,但会引发警告。使用v-for参数的过程当中,因为v-for提供三个参数,分别是: value, key, index。对其哪个做为元素绑定key值更能获得咱们想要的响应式渲染做出实验。git
总结出在采用不一样参数做为元素绑定key值时,出现的不一样的渲染结果,得出最优渲染方案github
li绑定key值类型 |
id | index | key |
---|---|---|---|
实验一 | 选取 | x | x |
实验二 | x | 选取 | x |
实验三 | x | x | 选取 |
// items data items: [ { id: 2, }, { id: 1, }, { id: 3, }, { id: 4, }, ]
<!-- dom constructor --> <template> <div class="content"> <ul> <li class="animate">对照组</li> <li v-for="(item, key, index) in items" class="animate" v-bind:key="item.id">{{item.id}}</li> <!-- 当前绑定值为item.id --> </ul> </div> </div> </template>
首先使用了item.id做为绑定的key值,咱们来看下效果:
渲染效果demodom
// items data items: [ { id: 2, }, { id: 1, }, { id: 3, }, { id: 4, }, ]
<!-- dom constructor --> <template> <div class="content"> <ul> <li class="animate">对照组</li> <li v-for="(item, key, index) in items" class="animate" v-bind:key="index">{{item.id}}</li> <!-- 当前绑定值为index --> </ul> </div> </div> </template>
在实验二中,使用v-for提供的index参数做为绑定的key值,咱们来看下效果:
渲染效果demo性能
// items data items: [ { id: 2, }, { id: 1, }, { id: 3, }, { id: 4, }, ]
<!-- dom constructor --> <template> <div class="content"> <ul> <li class="animate">对照组</li> <li v-for="(item, key, index) in items" class="animate" v-bind:key="key">{{item.id}}</li> <!-- 当前绑定值为key --> </ul> </div> </div> </template>
在实验二中,使用v-for提供的key参数做为绑定的key值,咱们来看下效果:
渲染效果democode
通过三次对照实验(咱们的实验采用了控制变量法,对照实验法进行),咱们能够得出结论:使用v-for渲染元素时,使用元素自身的id属性去指定渲染元素的key值有利于单个元素的从新渲染,若采用其余如v-for提供的index, key等值,在改变渲染出来的DOM结构时,会触发全部元素的从新渲染,当数据过大时,可能会形成性能负担。htm
当咱们在使用v-for进行渲染时,尽量使用渲染元素自身属性的id给渲染的元素绑定一个key值,这样在当前渲染元素的DOM结构发生变化时,可以单独响应该元素而不触发全部元素的渲染。排序