v-for的鍵值key

我們現(xiàn)在在使用v-for的時候冯丙、都必須會加上一個必要的key值,并且很多人會使用index來作為key,其實(shí)這樣是不太妥當(dāng)?shù)囊环N做法遭京。那么v-for中的鍵值key到底有什么作用呢胃惜。請看:

官方給出的解答

當(dāng) Vue 正在更新使用 v-for 渲染的元素列表時,它默認(rèn)使用“就地更新”的策略哪雕。如果數(shù)據(jù)項的順序被改變船殉,Vue 將不會移動 DOM 元素來匹配數(shù)據(jù)項的順序,而是就地更新每個元素斯嚎,并且確保它們在每個索引位置正確渲染利虫。這個類似 Vue 1.x 的 track-by="$index"。

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

為了給 Vue 一個提示,以便它能跟蹤每個節(jié)點(diǎn)的身份苦始,從而重用和重新排序現(xiàn)有元素寞钥,你需要為每項提供一個唯一 key attribute:

<div v-for="item in items" v-bind:key="item.id">
  <!-- 內(nèi)容 -->
</div>

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

舉例
 <div v-for="(item,index) in list" :key="index"> {{item.name}}</div>

 list: [
    {
      id: 1,
      name: "name1",
    },
    {
      id: 2,
      name: "name2",
    },
    {
      id: 3,
      name: "name3",
    }
  ]

這個場景如何我們不佳key vue 回直接報錯,所以大部分人都會使用index作為key的值

如果我們在添加一個數(shù)據(jù)

list: [
    {
      id: 1,
      name: "name1",
    },
    {
      id: 2,
      name: "name2",
    },
    {
      id: 3,
      name: "name3",
    },
    {
      id: 4,
      name: "last",
    },
  ],

此時前面3條數(shù)據(jù)直接服用之前的咨油,新渲染最后一條數(shù)據(jù)您炉,此時index作為key沒有任何問題

如何我們在中間添加一條

list: [
    {
      id: 1,
      name: "name1",
    },
    {
      id: 2,
      name: "name2",
    }, {
      id: 4,
      name: "last",
    },
    {
      id: 3,
      name: "name3",
    }
  ],

此時我們更新渲染的數(shù)據(jù) 通過index 定義key 進(jìn)行數(shù)據(jù)對比一下
之前的數(shù)據(jù)

key index name
0 0 name1
1 1 name2
2 2 name3

中間插入之后的數(shù)據(jù)

key index name
0 0 name1
1 1 last
2 2 name2
3 3 name3

由此可以發(fā)現(xiàn)除了第一條數(shù)據(jù)可以復(fù)用以為其余的3條數(shù)據(jù)都是需要重新渲染,因?yàn)閗ey的值發(fā)生了變化役电。

這個時候就可以體現(xiàn)出一個效率的問題赚爵,只插入一條數(shù)據(jù),卻要從新渲染3條數(shù)據(jù)

所以我們需要可以想辦法讓數(shù)組中不會變化的數(shù)據(jù)的key值也不變法瑟,所以不能通過index來設(shè)置key值冀膝,應(yīng)該設(shè)置一個唯一的id來標(biāo)識數(shù)據(jù)的唯一性;我們修改之后再來對比一下渲染的效率:

之前的數(shù)據(jù):

 <div v-for="(item,index) in list" :key="item.id"> {{item.name}}</div>
key id index name
1 1 0 name1
2 2 1 name2
3 3 2 name3

中間插入之后的數(shù)據(jù):

key id index name
1 1 0 name1
2 2 1 name2
4 4 2 last
3 3 3 name4

對此對比發(fā)現(xiàn)霎挟,只有一條數(shù)據(jù)發(fā)生改變窝剖,因?yàn)槠渌麛?shù)據(jù)的id 都沒有變、所以對應(yīng)的key也沒有發(fā)生改變酥夭。我們只需要渲染這一條新的數(shù)據(jù)就可以赐纱。 所以一般推薦使用id作為key值配合v-for使用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脊奋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子疙描,更是在濱河造成了極大的恐慌诚隙,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件起胰,死亡現(xiàn)場離奇詭異久又,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)待错,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門籽孙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人火俄,你說我怎么就攤上這事犯建。” “怎么了瓜客?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵适瓦,是天一觀的道長。 經(jīng)常有香客問我谱仪,道長玻熙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任疯攒,我火速辦了婚禮嗦随,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘敬尺。我一直安慰自己枚尼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布砂吞。 她就那樣靜靜地躺著署恍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜻直。 梳的紋絲不亂的頭發(fā)上盯质,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機(jī)與錄音概而,去河邊找鬼呼巷。 笑死,一個胖子當(dāng)著我的面吹牛赎瑰,可吹牛的內(nèi)容都是我干的王悍。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼乡范,長吁一口氣:“原來是場噩夢啊……” “哼配名!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起晋辆,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤渠脉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瓶佳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芋膘,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年霸饲,在試婚紗的時候發(fā)現(xiàn)自己被綠了为朋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡厚脉,死狀恐怖习寸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情傻工,我是刑警寧澤霞溪,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站中捆,受9級特大地震影響鸯匹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泄伪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一殴蓬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蟋滴,春花似錦染厅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至球散,卻和暖如春尿赚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蕉堰。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工凌净, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屋讶。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓冰寻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親皿渗。 傳聞我的和親對象是個殘疾皇子斩芭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容