久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

vue中為什么v-for指令的 key 值不能是 index?

vue中使用v-for時(shí)為什么不能用index作為key?下面本篇文章給大家介紹一下 v-for 的 key 值不能是 index 的原因,希望對(duì)大家有所幫助!

vue中為什么v-for指令的 key 值不能是 index?

為什么 v-for 的 key 值不能是 index?

很多人一說(shuō)起這道老生常談的面試題,馬上就開(kāi)始滔滔不絕地講述 虛擬DOMdiff算法 了。

講這些沒(méi)問(wèn)題,但如果是我,一定先講 v-for 的 key 值寫成 index 會(huì)造成的問(wèn)題,再講原理。

曾經(jīng)我寫 v-for, key 值永遠(yuǎn)都是 index,直到有一天,我這么寫造成了線上bug

來(lái)看一下我的線上bug演示吧:

父組件代碼 <Child   v-for="(item, index) in list"   :key="index"   :count="item.count"   :name="item.name"   @delete="handleDelete(index)" />  list: [     {       count: 1,       name: '第1個(gè)元素'     },     {       count: 2,       name: '第2個(gè)元素'     },     {       count: 3,       name: '第3個(gè)元素'     }   ]    handleDelete(index) {   this.list.splice(index, 1) },

vue中為什么v-for指令的 key 值不能是 index?

如代碼和gif演示,點(diǎn)擊刪除第2個(gè)元素,看上去似乎一切正常。

等一下,第三個(gè)元素的count值居然變成了2,wtf!!!

驚得我又去看了遍子組件的代碼

子組件 <div>   <span>{{ name }}</span>   count值為:{{ innerCount }}   <button @click="$emit('delete')">-</button> </div>  props: {   count: {     type: Number,     default: 0   },   name: {     type: String,     default: ''   } }, data() {   return {     innerCount: this.count   }  }

感覺(jué)也沒(méi)什么不對(duì)的啊。

不信邪,我又多創(chuàng)建了點(diǎn)元素來(lái)刪除,還試了下排序:

vue中為什么v-for指令的 key 值不能是 index?

果然,不光刪除元素有問(wèn)題,排序也有問(wèn)題。

把 key 值改成 item.name 再試一下。

<Child   v-for="(item, index) in list"   :key="item.name"   :count="item.count"   :name="item.name"   @delete="handleDelete(index)" />

vue中為什么v-for指令的 key 值不能是 index?

正常了。

這樣看來(lái),在 v-for 里把 key 值寫成 index,非常危險(xiǎn)啊。

在查閱了 vue 官方文檔之后,我終于明白了原因:

當(dāng) Vue 正在更新使用 v-for 渲染的元素列表時(shí),它默認(rèn)使用“就地更新”的策略。如果數(shù)據(jù)項(xiàng)的順序被改變,Vue 將不會(huì)移動(dòng) DOM 元素來(lái)匹配數(shù)據(jù)項(xiàng)的順序,而是就地更新每個(gè)元素,并且確保它們?cè)诿總€(gè)索引位置正確渲染。

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

不依賴子組件狀態(tài)

子組件里有一行很關(guān)鍵的代碼

data() {   return {     innerCount: this.count   }  }

子組件內(nèi)部定義了 innerCount,這樣子組件就有了自己的狀態(tài),按照官方文檔的說(shuō)明,這種情況下不能把 index 作為 key 值。

臨時(shí) DOM 狀態(tài)

<div v-for="(item, index) in list1" :key="index">   <input type="text" />   <button @click="delClick(index)">刪除</button> </div>

vue中為什么v-for指令的 key 值不能是 index?

刪除了第2項(xiàng),但是第3項(xiàng)在表單中的3變成了2,跟上面依賴子組件狀態(tài)的例子是一樣的。

總結(jié)

寫列表渲染時(shí), 依賴子組件狀態(tài)或臨時(shí) DOM 狀態(tài)的情況,如果有 刪除、增加、排序這樣的功能,不要把 index 作為 key。

事實(shí)上,寫列表渲染時(shí),永遠(yuǎn)不要把 index 做為 key,key 一定要是唯一標(biāo)識(shí)。

至于原因,就要理解 diff 算法之后才能明白了。

待解答問(wèn)題:

  • key 為什么不能寫成隨機(jī)數(shù)或時(shí)間戳?
  • key 為什么要是唯一標(biāo)識(shí)?

別著急,立了個(gè)寫100個(gè) vue 問(wèn)題相關(guān)文章的 flag 呢,后面的文章再慢慢分析。

希望我的 vue 系列文章能對(duì)前端路上的你有幫助~

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
奇米777国产一区国产二区| 国产麻豆一区二区三区精品视频| 美女性感视频久久| 国产欧美自拍一区| 欧美黄页在线免费观看| 精品国产美女a久久9999| 欧美国产美女| 1000部精品久久久久久久久| 成人日韩在线| 久久不射网站| 国产精品密蕾丝视频下载| 国产一区二区三区亚洲综合| 久久久蜜桃一区二区人| 日韩视频久久| 欧美一区久久| 亚洲黄色免费av| 中文久久精品| 国产精品亚洲二区| 亚洲成av在线| 亚洲综合小说| 精品一区视频| 免费观看久久av| 日韩激情一区二区| 国产一区丝袜| 国产亚洲一区在线| 国产精品成人自拍| 1000部精品久久久久久久久| 日韩国产在线一| 亚洲精品**中文毛片| 蜜臀va亚洲va欧美va天堂| 久久精品伊人| 美女久久一区| 98精品视频| 日本在线不卡视频| 日韩精品一卡| 国产亚洲高清一区| 婷婷综合六月| 欧美视频精品全部免费观看| 日韩欧美三级| 日韩av一区二区三区| 日韩毛片视频| 久久国产视频网| 亚洲激情社区| 色欧美自拍视频| 日本免费新一区视频| 久久久精品日韩| 国产精品最新| 蜜桃久久精品一区二区| 91一区二区三区四区| 日韩国产91| 香蕉久久夜色精品国产| 亚洲综合电影| 麻豆精品视频在线观看免费| 欧美日韩国产高清| 国产一区福利| 欧美亚洲综合视频| 玖玖精品视频| 欧美日韩中文一区二区| 免费在线亚洲欧美| 亚洲青青久久| 欧美精品自拍| 天堂8中文在线最新版在线| 国产欧美日韩精品一区二区三区| 99国产精品视频免费观看一公开| 在线看片福利| 精品淫伦v久久水蜜桃| 日本成人一区二区| 免费精品视频| 亚洲午夜在线| 日韩激情一区| 91亚洲一区| 精品久久一区| 久久a爱视频| 欧美中文一区| 日韩精品欧美精品| 中文字幕亚洲影视| 欧美专区在线| 99国产精品| 免费av一区二区三区四区| 日韩成人a**站| 久久久亚洲欧洲日产| 国产精品久久久久久久免费软件| 亚州av一区| 日韩精品一级中文字幕精品视频免费观看| 日韩不卡免费高清视频| 国产一区二区色噜噜| 欧美国产三级| 国产福利一区二区三区在线播放| 日韩精品免费观看视频| 亚洲专区视频| 日韩国产一二三区| 欧美亚洲色图校园春色| 日韩精品福利一区二区三区| 亚洲久草在线| 色8久久久久| 日韩二区在线观看| 91大神在线观看线路一区| 青青在线精品| 国产精品亚洲综合色区韩国| 国产精品一区二区三区www| 欧美极品一区二区三区| 国产一区二区三区视频在线| 久久久久久婷| 久久精品欧美一区| 影音国产精品| 视频精品一区| 国产精品久久久久久久久久妞妞| 麻豆视频一区| 在线一区av| 在线国产一区二区| 亚洲毛片网站| 美女av一区| 日韩成人高清| 日韩天堂av| 日韩中文字幕| 国产一区调教| 99视频在线精品国自产拍免费观看| 一区二区三区四区日韩| 欧美一区成人| 麻豆国产在线| 欧美日韩国产综合网| 亚洲精品视频一二三区| 国产激情综合| 亚洲高清激情| 91久久精品无嫩草影院| 国产精品二区不卡| 国产一在线精品一区在线观看| 午夜在线精品偷拍| 久久激情五月激情| 黄毛片在线观看| 99在线精品视频在线观看| 日本午夜精品久久久久| 久久久久久夜| 视频一区二区三区在线| 久久精品亚洲一区二区| 欧美日韩高清| 一区二区三区午夜视频| 精品国产亚洲一区二区三区大结局| 欧美综合另类| 欧美日韩一区二区国产 | 捆绑调教美女网站视频一区| 91免费精品| 在线精品亚洲| 日产精品一区二区| 国产毛片久久| 国产999精品在线观看| 麻豆9191精品国产| 国内一区二区三区| 亚洲免费影视| 精品高清久久| 亚洲精品高潮| 久久久夜夜夜| 国产精品成人国产| 国产精品美女久久久浪潮软件| 老色鬼精品视频在线观看播放| 一区免费视频| 精品国产一级| 日日夜夜免费精品视频| 久久久久国产精品一区二区| 91成人精品在线| 99在线精品免费视频九九视| 精品日韩在线| 日韩激情视频网站| 国产国产精品| 国产aa精品| 国产丝袜一区| 蜜桃久久精品一区二区| 日韩影院二区| 麻豆成人综合网| 亚洲精品免费观看| 午夜欧美理论片| 老色鬼精品视频在线观看播放| 亚洲三区欧美一区国产二区| 久久久久久美女精品| 精品国产不卡一区二区| 日本va欧美va瓶| 亚洲综合欧美| 欧美/亚洲一区| 日韩欧美三级| 精品国产乱码久久久久久1区2匹 | 蜜桃av一区二区| 国产亚洲毛片| 国内精品福利| 视频二区不卡| 亚洲精品福利电影| 国产黄色一区| 国产亚洲一区二区三区啪| 中文字幕日韩高清在线 | 色爱综合av| 91偷拍一区二区三区精品| 国产免费久久| 欧美日韩一区自拍| 亚洲97av| 免费一级片91| 久久国产88| 视频一区欧美精品| 国产视频一区免费看| 香蕉国产精品| 99精品综合| 99精品一区|