1. 程式人生 > 其它 >React 中的 key有什麼作用?為什麼遍歷列表時,key 最好不要用 index ?

React 中的 key有什麼作用?為什麼遍歷列表時,key 最好不要用 index ?

經典面試題:

1)react中的key有什麼作用?(key的內部原型是什麼?)

2)為什麼遍歷列表時,key最好不要用 index ?

1. 虛擬DOM中 key 的作用:

1)簡單的說:key 是虛擬 DOM 物件的唯一標識,在更新顯示時 key 起著極其重要的作用。

  2)詳細的說:當狀態中的資料發生變化時,react 會根據【新資料】生成【新的虛擬DOM】,隨後 React 進行【新虛擬DOM】與【舊虛擬DOM】的 diff 比較,比較規則如下:

    a)舊虛擬 DOM 中找到了與新虛擬 DOM 相同的 key:

      1)若虛擬 DOM 中內容沒變,直接使用之前的真實 DOM

      2)若虛擬 DOM 中內容變了,則生成新的真實 DOM,隨後替換掉頁面中之前的真實 DOM

    b)舊虛擬 DOM 中未找到與新虛擬 DOM 相同的 key

      根據資料建立新的真實 DOM,隨後渲染到頁面

2. 用 index 作為 key 可能會引發的問題:

  1. 若對資料進行:逆序新增、逆序刪除等破壞順序的操作,會產生沒有必要的真實 DOM 更新 ===> 介面效果沒有問題,但效率低

  2. 如果結構中還包含輸入類的 DOM:

    會產生錯誤的 DOM 更新 ===> 介面有問題。 因為輸入類 DOM 的 value值,虛擬 DOM 不會儲存,也不會去比較,可能會產生錯位。

  3. 注意: 如果不存在對資料的逆序新增、逆序刪除等破壞順序的操作,僅用於渲染列表展示,使用 index 作為 key 是沒有問題的。

3. 開發中如何選擇 key ?

  1. 最好使用每條資料的唯一標識作為 key,比如 id、手機號、身份證號、學號等唯一值。

  2.如果確定只是簡單的展示資料,用 index 也是可以的。