key是dom節點的惟一標識,與內容相關聯vue
vue
和react
的虛擬DOM
的Diff
算法大體相同,其核心是基於兩個簡單的假設 react
首先講一下diff
算法的處理方法,對操做先後的dom
樹同一層的節點進行對比,一層一層對比,以下圖:
算法
當某一層有不少相同的節點時,也就是列表節點時,Diff
算法的更新過程默認狀況下也是遵循以上原則。 dom
好比一下這個狀況:咱們要在A、B、C、D、E
列表中B
後面插入F
spa
當key=index
時,先後dom
樹是這樣子的:
把C
更新成F,D
更新成C,E
更新成D
,最後再插入E
,是否是很沒有效率?code
因此咱們須要使用key
來給每一個節點作一個惟一標識,Diff
算法就能夠正確的識別此節點,找到正確的位置區插入新的節點。
blog
key=index
和key=id
對比:vue
中列表循環需加:key="惟一標識"
惟一標識能夠是item
裏面id index
等,由於vue
組件高度複用增長Key
能夠標識組件的惟一性,爲了更好地區別各個組件 key
的做用主要是爲了高效的更新虛擬DOM
rem