遍歷物件的每乙個屬性深度對比是非常浪費效能的
react 使用列表的key
來進行對比,如果不指定,就預設為 index 下標
那麼,為什麼 不指定 key/用 index 下標 是不好的呢?
假設現在有這樣一段**:
const users = [, ];
users.map((u, i) =>
);
它會渲染出這個 dom 樹:
bob
sue
然後使用者做了某個操作,users
被unshift
另乙個物件,變成:
const users = [
, ,
,];
dom 樹就會變成這樣,注意key
的變化:
new-guy
bobsue
dom 樹的前後對比是這樣的:
bob
| new-guy
sue | bob
| sue
我們人類看得出來前後的變化只是在開頭加了乙個new-guy
而已
但是由於 react 使用 key 值來識別變化,所以 react 認為的變化是:
bob -> new-guy
sue -> bob
新增 sue
非常消耗效能 ?
但是如果我們一開始就給它指定乙個合適的 key,比如用 name:
users.map((u, i) =>
);
react 認為的變化就變成:
| new-guy
bob | bob
sue | sue
這樣只需要做乙個unshift
操作,效能節省 ? Vue v for中為什麼要加屬性key
在vue官網中強烈推薦在使用v for時要加key屬性,這篇文章看看加屬性key和不加屬性key的區別。我們模擬一下vue中對這部分的處理流程。先建立3個div元素,內容為 xiaozhang xiaowang xiaoliu 然後在第乙個div元素之前再新增乙個新div元素xiaoli,渲染後的內...
v for中為什麼要加key,原理是什麼
原理 1.vue實現了一套虛擬dom,使我們可以不直接操作dom元素,只運算元據就可以重新渲染頁面,而隱藏在背後的原理是高效的diff演算法 2.當頁面資料發生改變,diff演算法只會比較同一層級的節點 3.如果節點型別不同,直接乾掉前面的節點,再建立並新增新的節點,不會再比較這個節點後面的子節點 ...
為什麼要加 include stdafx h
所謂標頭檔案預編譯,就是把乙個工程 project 中使用的一些mfc標準標頭檔案 如windows.h afxwin.h 預先編譯,以後該工程編譯時,不再編譯這部分標頭檔案,僅僅使用預編譯的結果。這樣可以加快編譯速度,節省時間。預編譯標頭檔案通過編譯stdafx.cpp生成,以工程名命名,由於預編...