React(Key)
key適用於Virtual DOM樹新舊情形如下時
舊
<div>
<TodoItem text="one" />
<TodoItem text="two" />
</div>
新
<div>
<TodoItem text="zero" />
<TodoItem text="one" />
<TodoItem text="two" />
</div>
我們只是前插了一個TodoItem 節點,但如果沒有key,<TodoItem text="one" />
<TodoItem text="two" />都會被解除安裝,然後<TodoItem text="zero" />,<TodoItem text="one" />,<TodoItem text="two" />會被載入,這會造成DOM樹更新成本的劇增。
之所以出現上述這種更新方案,是因為react在判斷兩個新舊節點不同時所依據的"標識"是各節點位置。上述情形中,新舊節點位置不同,react自然會認為新舊節點不同。
而按照我們的理想狀態,應該讓<TodoItem text="one" />,<TodoItem text="two" />不被解除安裝,僅僅只是<TodoItem text="zero" />被載入,這就需要各個節點增加一個新標識,這個標識應該不隨節點位置的變化而變化。這個標識,就被我們稱為"key"。
- 採用"key"的解決方案
舊
<div>
<TodoItem key={1} text="one" />
<TodoItem key={2} text="two" />
</div>
新
<div>
<TodoItem key={0} text="zero" />
<TodoItem key={1} text="one" />
<TodoItem key={2} text="two" />
</div>
···
相關文章
- react 列表&keysReact
- 談談 react 中的 keyReact
- React學習筆記-列表 & KeysReact筆記
- [React技術內幕] key帶來了什麼React
- 筆記:React 中關於 key 的一點總結筆記React
- MGETkey[key…]
- React從入門到精通系列之(8)Lists和Keys的處理React
- js keyup、keypress和keydown事件JS事件
- With KEY & With Table KEY 的使用
- keyup,keypress,keydown事件的區別事件
- mysql中key 、primary key 、unique key 與index區別MySqlIndex
- Redis熱點key大keyRedis
- react.js:3640 Warning: Each child in an array or iterator should have a unique "key" prop. Check the...ReactJS
- spark RDD,reduceByKey vs groupByKeySpark
- valueforkey和objectforkey區別Object
- js的事件屬性altKey,ctrlKey,shiftKey介紹JS事件
- 一篇文章告訴你React裡為什麼不能用index作為keyReactIndex
- keystone系列一:keystone基礎
- monkeyscript - 定製化monkey流程
- SORT (UNIQUE STOPKEY)/ SORT GROUP BY STOPKEYTopK
- SETBITkeyoffsetvalue
- ZINCRBYkeyincrementmemberREM
- TYPEkey
- SFHFKeychainUtilsAI
- 大Key
- 熱Key
- KeyKey Typing for Mac(打字大師)Mac
- keystone系列五:keystone原始碼分析原始碼
- keystone系列四:keystone部署及操作
- onkeyup和onkeydown事件的區別事件
- Key Attribute和Key Column:蘋果和桔子蘋果
- WPF Window.InputBindings KeyBinding Key
- 對setObject:forKey:與setObject:forKeyedSubscript:的理解Object
- CSS @keyframesCSS
- sessionStorage.key()Session
- Monkey命令
- ZREVRANGEkeystartstop[WITHSCORES]VR
- A KeyValuePair in JavaAIJava