亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue中v-for指令的key值可以是index嗎

發布時間:2022-02-20 19:45:05 來源:億速云 閱讀:501 作者:iii 欄目:編程語言

本篇內容介紹了“vue中v-for指令的key值可以是index嗎”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

vue中v-for指令的key值可以是index嗎

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

來看一下我的線上bug演示吧:

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

list: [
    {
      count: 1,
      name: '第1個元素'
    },
    {
      count: 2,
      name: '第2個元素'
    },
    {
      count: 3,
      name: '第3個元素'
    }
  ]
  
handleDelete(index) {
  this.list.splice(index, 1)
},

等一下,第三個元素的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
  } 
}

感覺也沒什么不對的啊。

不信邪,我又多創建了點元素來刪除,還試了下排序:果然,不光刪除元素有問題,排序也有問題。

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

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

正常了。

這樣看來,在 v-for 里把 key 值寫成 index,非常危險啊。

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

當 Vue 正在更新使用 v-for 渲染的元素列表時,它默認使用“就地更新”的策略。如果數據項的順序被改變,Vue 將不會移動 DOM 元素來匹配數據項的順序,而是就地更新每個元素,并且確保它們在每個索引位置正確渲染。

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

不依賴子組件狀態

子組件里有一行很關鍵的代碼

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

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

臨時 DOM 狀態

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

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

“vue中v-for指令的key值可以是index嗎”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

青川县| 柏乡县| 襄垣县| 昭觉县| 闽侯县| 景谷| 兴山县| 柏乡县| 象州县| 怀安县| 垫江县| 册亨县| 桐梓县| 江津市| 济源市| 东兰县| 治县。| 奉新县| 绥中县| 临城县| 苍梧县| 九台市| 威信县| 阿巴嘎旗| 酒泉市| 岳池县| 泰州市| 三河市| 随州市| 鸡泽县| 桓台县| 中超| 广宗县| 安远县| 三亚市| 海伦市| 临猗县| 乌海市| 西吉县| 凌海市| 鹤岗市|