天天看點

淺了解:react為何需要設定唯一key值(antd-table)

一、React規範

1.1 react key的作用

當渲染重複資料的時候,

React.diff

會根據生成的key進行虛拟DOM渲染, 是以我們需要在周遊的地方都要加上key,例如map、for等等

同樣, antd作為react的UI元件庫, 有些地方也需要遵循react的key規範.例如 antd-table 在渲染前要求: 在 Table 中,dataSource 和 columns 裡的資料值都需要指定 key 值。對于 dataSource 預設将每列資料的 key 屬性作為唯一的辨別。

1.2 antd-table key缺失

如果你的資料沒有這個屬性,務必使用 rowKey 來指定資料列的主鍵。若沒有指定,控制台會出現以下的提示,表格元件也會出現各類奇怪的錯誤。

Each record in table should have a unique

key

prop,or set

rowKey

to an unique primary key.

雖然隻是一個警告,但是這個會給頁面table表格帶來無法預測的錯誤

1.3 antd-table key相同

這種情況感覺到的錯誤會比較明顯:

因為你在一個列上的操作,在相同key上的列也會響應!

當滑鼠滑過其中一個列并高亮的時候, 另一個列也會被高亮

二、添加Key值

我們知道了為什麼添加key, 以及不添加key值會出現什麼情況

2.1 完善

dataSource

columns

每一行(dataSource)和每一列(columns)都應該要有一個唯一key值, 渲染的時候react才能準确知道是否需要修改.

let columns = [{
    key: '1',
    title: '歌曲名字',
    dataIndex: 'title'
}]

let dataSource = [{
    key: 1,
    title: '啞巴'
}]

<Table
    columns={columns}
    dataSource={dataSource}
/>
           

2.2 直接在table上加上每一列key值:

rowKey

但是注意: 這個key也是要求唯一的

<Table
    rowKey={(record, index) => `complete${record.id}${index}`}
    ...
/>
           

具體的可以檢視官方文檔: 《antd-table》