1. 虛擬DOM中key的作用:
當(dāng)狀態(tài)中的數(shù)據(jù)發(fā)生變化時做鹰,React會根據(jù)【新數(shù)據(jù)】生成【新的虛擬DOM】,隨后進行【新虛擬DOM】和【舊虛擬DOM】的diff比較绢彤,比較規(guī)則如下:
- 舊虛擬DOM中找到了與新虛擬DOM相同的key:
- 若虛擬DOM中內(nèi)容沒變, 則直接使用之前的真實DOM
- 若虛擬DOM中內(nèi)容變了旁舰,則生成新的真實DOM,隨后替換掉頁面中之前的真實DOM
- 舊虛擬DOM中未找到與新虛擬DOM相同的key:
- 根據(jù)數(shù)據(jù)創(chuàng)建新的真實DOM嗡官,隨后渲染到頁面
2.用index作為key可能會引發(fā)的問題
- 若對數(shù)據(jù)進行逆序添加箭窜、逆序刪除等破壞順序的操作,會導(dǎo)致index錯亂衍腥,產(chǎn)生沒有必要的真實DOM更新磺樱,此時界面顯示效果沒問題,但是效率會低(相當(dāng)于重新生成所有的真實DOM)
- 如果結(jié)構(gòu)中還存在輸入類DOM婆咸,會產(chǎn)生錯誤的DOM更新竹捉,使得界面顯示出現(xiàn)問題
- 如果不存在逆序操作等破壞順序的操作,僅用于渲染列表用于展示尚骄,使用index作為key是沒有問題的活孩。
3.在開發(fā)中如何選擇key?
- 最好使用每一條數(shù)據(jù)的唯一標(biāo)識作為key乖仇,例如id憾儒、身份證號碼、學(xué)號等
- 如果確定只是簡單地展示數(shù)據(jù)乃沙,用index也是可以的起趾。