1. 虛擬DOM中key的作用:
當(dāng)狀態(tài)中的數(shù)據(jù)發(fā)生變化時,React會根據(jù)【新數(shù)據(jù)】生成【新的虛擬DOM】,隨后進(jìn)行【新虛擬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ù)進(jìn)行逆序添加、逆序刪除等破壞順序的操作,會導(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也是可以的。