key
的重要性因爲vue
循環時不是將dom
元素循環創造, 而是一個dom
元素重複使用, 而它的diff
機制是同層元素進行對比; 以下圖:vue
如上圖: 對比的原則是 父節點 A
與 父節點 A
對比,下面的子節點與子節點進行對比. 若是右邊的A
節點 變爲 B
節點, 可是B
下面的子元素仍是B1, B2, B3
. Vue
的diff
機制會刪除 A
節點, 同時連帶下面的子節點也會刪除, 並創造B
節點, 再依次建立下面的B1, B2, B3
子節點;數組
若是咱們如圖所示, B1,B2,B3
是循環出來的相同dom
, 在B1
和B2
中間加入一個B4
節點, 若是沒有設置key
屬性時, Vue
的機制是將B2
改變成B4
, 將B3
改變成B2
, 在建立一個B3
節點; 若是有key
屬性時, 直接在B1
與B2
之間插入B4
節點就能夠了;dom
並且索引並不推薦它做爲key
, 咱們在進行對數組的數據操做中, 每個數組內的元素的索引是在不斷變化的,所以並不能很絕對的表明一個節點;this
v-for
與 v-if
不要同時出如今一個節點上建議使用 computed
過濾掉不要顯示的數據後再作循環code
this.$forceUpdate()
強制更新組件