相信很多面試前端的小伙伴都會遇到面試官問這樣的問題:react或者vue的key值有什么作用?為什么最好不用index作為key值靶衍?今天就簡單聊聊這些問題藕漱!
key值有什么作用?
簡單說:
key是虛擬DOM的對象的標識。在更新顯示時key起及其重要的作用项戴。
詳細的說:
當狀態(tài)發(fā)生變化,react會根據新數據生成新的虛擬DOM颗品,隨后react進行新的虛擬DOM與就舊的虛擬DOM進行DIFF比較肯尺。
情況一. 舊的虛擬DOM中找到與新虛擬DOM中相同的key值沃缘。
(1)若虛擬DOM中內容沒有發(fā)生改變,則直接使用真實DOM.
(2)若虛擬DOM內容發(fā)生改變则吟,則生成新的虛擬DOM槐臀,隨后替換掉頁面之中的真實情況二.舊的虛擬DOM未找到新的虛擬DOM的key值。
根據數據創(chuàng)建新的真實的DOM氓仲,渲染到頁面水慨。
用index作為key可能發(fā)生的問題?
1.若對數據進行逆序操作敬扛,添加刪除等破壞順序的操作晰洒,會產生沒必要的真實DOM更新,最然不會引發(fā)界面問題啥箭,但是效率很低谍珊。
2.如果結構中包含輸入類的DOM,如input急侥,會產生錯誤的DOM更新砌滞,界面出現問題。
3.注意坏怪!如果不存在對數據的逆序操作或不包含輸入框結構贝润,僅僅用于頁面渲染展示,使用index作為key一點問題沒有铝宵。
開發(fā)如何選擇打掘?
1.最好使用每條數據的唯一標識作為key值,比如id鹏秋,手機號等
2.如果僅僅用于簡單展示尊蚁,使用index沒有一點問題。