為什么v-for循環(huán)時要寫上key

當 Vue.js 用 v-for 正在更新已渲染過的元素列表時,它默認用“就地復用”策略。如果數(shù)據(jù)項的順序被改變,Vue 將不會移動 DOM 元素來匹配數(shù)據(jù)項的順序, 而是簡單復用此處每個元素,并且確保它在特定索引下顯示已被渲染過的每個元素。這個類似 Vue 1.x 的 track-by="$index" 。

這個默認的模式是高效的,但是只適用于不依賴子組件狀態(tài)或臨時 DOM 狀態(tài) (例如:表單輸入值) 的列表渲染輸出。

為了給 Vue 一個提示,以便它能跟蹤每個節(jié)點的身份,從而重用和重新排序現(xiàn)有元素,你需要為每項提供一個唯一 key 屬性。理想的 key 值是每項都有的唯一 id。這個特殊的屬性相當于 Vue 1.x 的 track-by ,但它的工作方式類似于一個屬性,所以你需要用 v-bind 來綁定動態(tài)值 (在這里使用簡寫):

<div v-for="item in items" :key="item.id"> </div>

建議盡可能在使用 v-for 時提供 key,除非遍歷輸出的 DOM 內(nèi)容非常簡單,或者是刻意依賴默認行為以獲取性能上的提升。

因為它是 Vue 識別節(jié)點的一個通用機制,key 并不與 v-for 特別關聯(lián),key 還具有其他用途,我們將在后面的指南中看到其他用途。

以上來自 vue官方文檔

簡單來說,vue在進行頁面更新時,會通過Diff算法對虛擬DOM進行更新,因為真實的DOM消耗比較大。 假設我們需要對數(shù)組進行增刪改查,我們需要快速定位到某一項,所以我們需要給每項綁一個具體的唯一的id值

有key和沒key的差異

例如我們要在BC中間插入一個節(jié)點


image.png

Diff算法默認執(zhí)行時這樣的


image.png

就是把C變成F,D變成C,E變成D,最后插入E,是不是很麻煩

有key和沒有key的區(qū)別


image.png

為什么key盡量不要使用index

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 主要還是自己看的,所有內(nèi)容來自官方文檔。 介紹 Vue.js 是什么 Vue (讀音 /vju?/,類似于 vie...
    Leonzai閱讀 3,538評論 0 25
  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容,還有我對于 Vue 1.0 印象不深的內(nèi)容。關于...
    云之外閱讀 5,177評論 0 29
  • 首次發(fā)表在個人博客 v-for中的key 使用v-for更新已渲染的元素列表時,默認用就地復用策略;列表數(shù)據(jù)修改的...
    IOneStar閱讀 8,790評論 2 7
  • 一、vue是什么 vue是一套用于構(gòu)建用戶界面的漸進式框架。與其它大型框架不同的是,vue被設計為可以自底向上逐層...
    勝過夜的美閱讀 6,626評論 0 3
  • vue概述 在官方文檔中,有一句話對Vue的定位說的很明確:Vue.js 的核心是一個允許采用簡潔的模板語法來聲明...
    li4065閱讀 7,624評論 0 25

友情鏈接更多精彩內(nèi)容