vue和react都實現了一套虛擬dom,使我們可以不直接操作dom元素,只運算元據便可以重新渲染頁面。其功勞歸功於背後高效的diff演算法。
兩個相同的元件產生類似的dom結構,不同的元件產生不同的dom結構。當頁面的教據發生變化時,diff演算法只會比較同一層級的節點同一層級的一組節點,他們可以通過唯一的id進行區分。
1.如果節點型別不同,直接乾掉前面的節點,再建立並插入新的節點,
不會再比較這個節點以後的子節點了。
2.如果節點型別相同,則會重新設定該節點的屬性,從而實現節點的更新。
當某一層有很多相同的節點時,也就是列表節點時,diff演算法的更新過程預設情況下也是遵循以上原則。如以下情況:
我們希望可以在b和c之間加乙個f,diff演算法預設執行起來是這樣的:
它會把c更新成f,d更新成c,e更新成d,最後再插入e,是不是很沒有效率?
所以我們需要使用key來給每個節點做乙個唯一標識,diff演算法就可以正確的識別此節點,找到正確的位置區插入新的節點。
總結:
key的作用主要是為了高效的更新虛擬dom,並且在vue中在使用相同標籤名,
元素的過渡切換時,也會使用到key屬性,其目的也是為了讓vue可以區分它們
vue中key的作用
v for中為什麼要加key呢,這裡我給大家舉個栗子 沒有key text v model name add 新增 button div for item,i in list checkbox li ul 建立 vue 例項,得到 viewmodel var vm newvue methods th...
Vue中key的作用
相信大多數vue開發者接觸到key屬性的時候是使用v for進行列表渲染的時候,如果不使用key屬性,vue會產生警告,那麼在這個時候key屬性的作用是什麼呢?官方文件中說 當 vue.js 用v for正在更新已渲染過的元素列表時,它預設用 就地復用 策略。如果資料項的順序被改變,vue 將不會移...
Vue中key的作用
官方文件 vue 會盡可能高效地渲染元素,通常會復用已有元素而不是從頭開始渲染。這麼做除了使 vue 變得非常快之外,還有其它一些好處。例如,如果你允許使用者在不同的登入方式之間切換 usernamelabel template emaillabel template 那麼在上面的 中切換login...