答案:主要是為了提公升同級的比較效率的。
借用我在部落格上另外一篇 vue 2 渲染過程的圖
其中核心比對邏輯就是新老節點頭對頭,頭對尾,尾對頭,尾對尾,都判定非 samevnode,則拿著 key 去比對,若其中有被判定為 samevnode,則復用節點。反之需要刪除後再新增新節點。
function samevnode(a, b)
那麼有個問題,能復用節點一定就快嗎?不一定,設你需要渲染 10w 條列表資料
}
list = [
, ......
]
若不寫 key,新老節點的 key 都是 undefined 相同。tag ,iscomment相同,且 data 不為空。那li 節點也都被判定為 samevnode,只需要迭代替換文字節點就可以了。
但若寫了 key,新老節點部分 key 不相同。判定為 samevnode 的部分照樣去替換文字節點,然而 key 不相同的部分還得建立/刪除 dom 節點,花銷自然比不寫 key 大。
但這種場景只適用於簡單的無狀態元件,vue 還是推薦使用 key,這是因為開發中遇到的大多數場景,都有自己的狀態。
Vue React列表元件中寫 key 原因
vue 和 react 都是採用 diff 演算法來對比新舊虛擬節點,從而更新節點。vue 文件原文 當 vue 正在更新使用 v for 渲染的元素列表時,它預設使用 就地更新 的策略。如果資料項的順序被改變,vue 將不會移動 dom 元素來匹配資料項的順序,而是就地更新每個元素,並且確保它們在...
泛型 為什麼要在方法前寫
public class test public void sett t name public void sett2 t name public t gett2 t name public t gett3 t name public static void main string args pub...
為什麼react列表要加key
遍歷物件的每乙個屬性深度對比是非常浪費效能的 react 使用列表的key來進行對比,如果不指定,就預設為 index 下標 那麼,為什麼 不指定 key 用 index 下標 是不好的呢?假設現在有這樣一段 const users users.map u,i 它會渲染出這個 dom 樹 bob s...