久久精品五月,日韩不卡视频在线观看,国产精品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 值寫(xiě)成 index 會(huì)造成的問(wèn)題,再講原理。

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

來(lái)看一下我的線(xiàn)上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 值寫(xiě)成 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)的模式是高效的,但是只適用于不依賴(lài)子組件狀態(tài)或臨時(shí) DOM 狀態(tài) (例如:表單輸入值) 的列表渲染輸出

不依賴(là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,跟上面依賴(lài)子組件狀態(tài)的例子是一樣的。

總結(jié)

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

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

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

待解答問(wèn)題:

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

別著急,立了個(gè)寫(xiě)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综合
欧美日韩在线网站| 国产精品最新| 久久99国产精品视频| 亚洲精品乱码| 亚洲在线免费| 国产亚洲毛片在线| 亚洲欧美日韩在线观看a三区| 欧美~级网站不卡| 亚洲激情久久| 久久视频精品| 婷婷激情图片久久| 亚州av乱码久久精品蜜桃| 91九色精品国产一区二区| 国产精品99一区二区| 欧美日韩国产高清| 黄色亚洲精品| 视频在线观看91| 五月亚洲婷婷 | 国产成人精品福利| 国产精品第十页| 国产一区二区三区不卡视频网站| 成人在线免费观看网站| 蜜桃精品在线| 久久精品国产亚洲夜色av网站| 激情五月综合| 亚洲九九精品| 美日韩一区二区三区| 成人片免费看| 亚洲少妇在线| 日韩高清电影免费| 精品视频自拍| 神马日本精品| 一本一道久久a久久| 国产精品极品| 日韩在线二区| 免费在线视频一区| 欧美日韩午夜电影网| 国内精品亚洲| 亚洲精品一区二区在线看| 综合激情视频| 麻豆国产91在线播放| 久久九九精品| 日韩手机在线| 亚洲美女久久精品| 综合欧美亚洲| 国产精品高颜值在线观看| 亚洲在线观看| 精品中文在线| 天堂av在线一区| 国产日韩欧美三区| 日韩精品午夜| 日韩av一二三| 91精品蜜臀一区二区三区在线| 中文字幕亚洲影视| 国产成人精品一区二区三区视频| 欧美特黄一级| 麻豆精品少妇| 久久电影一区| 成人精品久久| 亚洲一区二区免费在线观看| 国产一区二区三区不卡av| 好看的av在线不卡观看| 国产精品欧美在线观看| 欧美精品一二| 国产欧美日韩精品一区二区三区| 精精国产xxxx视频在线播放| 日韩精品国产欧美| 偷拍精品精品一区二区三区| 亚洲精品人人| 成人日韩在线观看| 91精品国产经典在线观看| 日韩精品午夜| 国产欧美综合一区二区三区| 亚洲午夜久久久久久尤物| 国产亚洲一区二区三区啪| 久久精品国产亚洲夜色av网站| 国产精品久久久网站| 久久xxxx精品视频| 91精品韩国| 91国内精品| 夜久久久久久| 成人久久久久| 免费亚洲婷婷| 日韩视频一二区| 日韩视频一区| 日韩久久精品| 国产精品18| 亚洲精品影院在线观看| 狠狠操综合网| 亚洲不卡av不卡一区二区| 精品香蕉视频| 国产精品欧美三级在线观看| 石原莉奈在线亚洲二区| 国产综合婷婷| 最近高清中文在线字幕在线观看1| 日韩精品一区二区三区免费视频 | 精品一区二区三区四区五区| 免费久久精品视频| 999国产精品永久免费视频app| 国产精品a级| 亚洲乱亚洲高清| 久久国产精品毛片| 99精品视频在线| 日韩1区2区| 麻豆精品久久久| 国产日韩1区| 日本综合精品一区| 黄页网站一区| 久久国产电影| 欧美日韩尤物久久| 伊人久久视频| 国产精品黑丝在线播放| 里番精品3d一二三区| 国产亚洲一卡2卡3卡4卡新区| 亚洲精品人人| 亚洲精品一区二区在线播放∴| 丝袜国产日韩另类美女| 国产亚洲精品v| 午夜在线精品偷拍| 日韩视频在线一区二区三区 | 亚洲精品一二| 亚洲二区免费| 极品日韩av| 国产综合色产| 免费久久精品| 黄色在线一区| 丝袜亚洲精品中文字幕一区| 亚洲欧美日韩国产| 亚洲专区欧美专区| 欧美国产免费| 日韩高清电影免费| 日本在线不卡视频| 日韩精品欧美大片| 日本视频一区二区| 国产欧美一区二区三区精品观看| 亚洲视频二区| 四虎国产精品免费久久| 亚洲bt欧美bt精品777| 日韩av电影一区| 欧美日本久久| 韩日一区二区| 久久久人人人| 九一国产精品| 三级欧美韩日大片在线看| 亚洲日本欧美| 国产精品白浆| 97国产精品| 蜜桃成人av| 蜜桃一区二区三区在线观看| 日本精品在线播放| 国产精品夜夜夜| 久久精品人人| 成人羞羞视频播放网站| 99亚洲视频| 日韩成人午夜精品| 国产成人免费视频网站视频社区| 天堂中文av在线资源库| 亚洲深夜av| 国产欧美久久一区二区三区| 日韩成人精品一区二区| 欧美精品九九| 欧美精品国产白浆久久久久| jizzjizz中国精品麻豆| 欧美日韩精品一本二本三本| 日韩高清成人在线| 91偷拍一区二区三区精品| 亚洲精品888| 91亚洲无吗| 精精国产xxxx视频在线播放| 蜜臀av在线播放一区二区三区| 国产欧美日韩在线一区二区| 欧美精选视频一区二区| 中文精品电影| 97精品国产福利一区二区三区| 亚洲深爱激情| 久久麻豆视频| 欧美网站在线| 久久国产人妖系列| 亚洲a在线视频| 欧美亚洲二区| 亚洲婷婷免费| 日韩av网站在线观看| 日韩一区二区三区免费| 日韩精品中文字幕吗一区二区 | 成人免费电影网址| 日韩综合小视频| 久久毛片亚洲| 亚洲区第一页| 综合日韩av| 日韩av一区二区三区| 日韩精品网站| 国产精品对白| 国产一级久久| 国产伦精品一区二区三区在线播放| 国产拍在线视频| 天堂久久一区| 波多野结衣一区| 国产精品va| 久久成人亚洲| 日韩大片在线播放|