我正在渲染一个带有蚂蚁设计的表,它工作正常,但是控制台中出现警告:
表中的每个记录应具有唯一的
key
属性,或设置rowKey
到唯一的主键
我的代码如下:
import React, { Component } from 'react';
import { Table} from 'antd';
import { adalApiFetch } from '../../adalConfig';
class ListTenants extends Component {
constructor(props) {
super(props);
this.state = {
data: []
};
}
fetchData = () => {
adalApiFetch(fetch, "/Tenant", {})
.then(response => response.json())
.then(responseJson => {
if (!this.isCancelled) {
const results= responseJson.map(row => ({
ClientId: row.ClientId,
ClientSecret: row.ClientSecret,
Id: row.Id,
SiteCollectionTestUrl: row.SiteCollectionTestUrl,
TenantDomainUrl: row.TenantDomainUrl
}))
this.setState({ data: results });
}
})
.catch(error => {
console.error(error);
});
};
componentDidMount(){
this.fetchData();
}
render() {
const columns = [
{
title: 'Client Id',
dataIndex: 'ClientId',
key: 'ClientId'
},
{
title: 'Site Collection TestUrl',
dataIndex: 'SiteCollectionTestUrl',
key: 'SiteCollectionTestUrl',
},
{
title: 'Tenant DomainUrl',
dataIndex: 'TenantDomainUrl',
key: 'TenantDomainUrl',
}
];
return (
<Table columns={columns} dataSource={this.state.data} />
);
}
}
export default ListTenants;
答案 0 :(得分:3)
只需在标签链接中添加唯一键值即可:
<Table
columns={columns}
dataSource={this.state.data}
rowKey="Id" /> // unique key
希望获得帮助
答案 1 :(得分:2)
React使用按键prop渲染列表。之所以如此有效,是因为react可让您降低差异化算法的复杂度并减少DOM突变的数量。您可以在React对帐文档中阅读更多内容:https://reactjs.org/docs/reconciliation.html
在您的情况下,您将键添加到了列,但没有添加到行。将键字段添加到数据源。因此,您的代码可能如下:
import React, { Component } from 'react';
import { Table} from 'antd';
import { adalApiFetch } from '../../adalConfig';
class ListTenants extends Component {
constructor(props) {
super(props);
this.state = {
data: []
};
}
fetchData = () => {
adalApiFetch(fetch, "/Tenant", {})
.then(response => response.json())
.then(responseJson => {
if (!this.isCancelled) {
const results= responseJson.map(row => ({
key: row.id, // I added this line
ClientId: row.ClientId,
ClientSecret: row.ClientSecret,
Id: row.Id,
SiteCollectionTestUrl: row.SiteCollectionTestUrl,
TenantDomainUrl: row.TenantDomainUrl
}))
this.setState({ data: results });
}
})
.catch(error => {
console.error(error);
});
};
componentDidMount(){
this.fetchData();
}
render() {
const columns = [
{
title: 'Client Id',
dataIndex: 'ClientId',
key: 'ClientId'
},
{
title: 'Site Collection TestUrl',
dataIndex: 'SiteCollectionTestUrl',
key: 'SiteCollectionTestUrl',
},
{
title: 'Tenant DomainUrl',
dataIndex: 'TenantDomainUrl',
key: 'TenantDomainUrl',
}
];
return (
<Table columns={columns} dataSource={this.state.data} />
);
}
}
export default ListTenants;
答案 2 :(得分:2)
只需要在表上将rowkey
设置为唯一值。
<Table
dataSource={[finance]}
columns={columns}
rowKey={record => record.id}
/>
答案 3 :(得分:1)
因为您没有将密钥添加到dataSource数组,所以还要在其中添加密钥。
赞:
const results= responseJson.map(row => ({
key: row.ClientId, // here
ClientId: row.ClientId,
ClientSecret: row.ClientSecret,
Id: row.Id,
SiteCollectionTestUrl: row.SiteCollectionTestUrl,
TenantDomainUrl: row.TenantDomainUrl
}))
或者您可以通过使用属性rowKey
将dataSource数组的任何唯一值用作键,如下所示:
<Table
columns={columns}
dataSource={this.state.data}
rowKey="Id" /> // any unique value
答案 4 :(得分:1)
对我来说,这个解决方案
rowKey="{record => record.id}"
或rowKey="id"
但是在您的收藏夹中必须存在id列
答案 5 :(得分:0)
表中的每个记录应具有唯一的
key
属性,或将rowKey
设置为唯一的主键。
每个col具有唯一的
key
// each column with unique key
import React from 'react';
import {
Table,
} from 'antd';
const leftTableColumns = [
{
title: 'Page / Modal',
dataIndex: 'pageModal',
key: 'pageModal',
},
{
title: 'Success Rate',
dataIndex: 'successRate',
key: 'successRate',
},
];
const LeftTable = (props) => {
const {
leftTableDatas,
} = props;
return (
<>
<Table
columns={leftTableColumns}
dataSource={leftTableDatas}
/>
</>
);
};
export {
LeftTable,
};
export default LeftTable;
只需要在表上将
rowkey
设置为唯一值
// table with rowkey
import React from 'react';
import {
Table,
} from 'antd';
const leftTableColumns = [
{
title: 'Page / Modal',
dataIndex: 'pageModal',
},
{
title: 'Success Rate',
dataIndex: 'successRate',
},
];
const LeftTable = (props) => {
const {
leftTableDatas,
} = props;
return (
<>
<Table
// shorthand rowKey
rowkey="id"
// rowKey={obj => obj.id}
columns={leftTableColumns}
dataSource={leftTableDatas}
/>
</>
);
};
export {
LeftTable,
};
export default LeftTable;
https://ant.design/components/table/
答案 6 :(得分:0)
快速破解
我确实在每个键上分配了更改为字符串的随机数学数字。?
也就是说我的专栏变成了
const columns = [
{
title: 'Client Id',
dataIndex: 'ClientId',
key: () => Math.random().toString(),
},
{
title: 'Site Collection TestUrl',
dataIndex: 'SiteCollectionTestUrl',
key: () => Math.random().toString(),
},
{
title: 'Tenant DomainUrl',
dataIndex: 'TenantDomainUrl',
key: () => Math.random().toString(),
}
];
希望这对未来来访的人有所帮助.........
答案 7 :(得分:-1)
我遇到了你的问题,这个方法回答了
<Table
columns={columns}
dataSource={data}
rowKey="name"
/>