在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結構發生變化時,可以單獨響應該元素而不觸發全部元素的渲染。排序