На самом деле, это проблема , которая еще не исправлена. Я бы порекомендовал использовать другую библиотеку или что-то еще, если вы хотите сделать большой список.
Я установил кодовую песочницу . В моем случае antd table
становится медленным, если я выбираю 1000 / page
, иначе все в порядке. Это зависит от машины.
class App extends Component {
state = {
showmodel: true,
columns: [],
timesheetlist: []
};
componentDidMount = () => {
let data = [];
for (var i = 0; i < 10000; i++) {
data.push({
empid: `${i}`,
empname: `empname ${i}`,
tdate: `05/09/${i > 2019 ? "2019" : i}`
});
}
const columns = [
{
title: "Employee ID",
dataIndex: "empid",
key: "empid",
width: 120,
defaultSortOrder: "descend",
sorter: (a, b) => a.empid - b.empid,
fixed: "left"
},
{
title: "Employee Name",
dataIndex: "empname",
key: "empname",
width: 250,
defaultSortOrder: "descend",
sorter: (a, b) => (a.empname ? a.empname.localeCompare(b.empname) : 1),
fixed: "left"
},
{
title: "Date",
dataIndex: "tdate",
key: "tdate",
width: 100,
render: date => moment(date).format("DD/MM/YYYY"),
sorter: (a, b) => a.tdate.localeCompare(b.tdate),
fixed: "left"
}
];
this.setState({
timesheetlist: data,
columns
});
};
handleModelShow = () => {
this.setState({ showmodel: !this.state.showmodel });
};
render() {
return (
<>
<Modal
show={this.state.showmodel}
onHide={this.handleModelShow}
dialogClassName="mtd-viewdialog"
>
<Modal.Header closeButton />
<Modal.Body>
<Table
columns={this.state.columns}
dataSource={this.state.timesheetlist}
rowKey="id"
size="small"
bordered
scroll={{ x: "max-content", y: 450 }}
pagination={{
pageSizeOptions: ["10", "30", "60", "100", "1000"],
showSizeChanger: true
}}
/>
</Modal.Body>
<Modal.Footer>
<Button
variant="secondary"
onClick={this.handleModelShow}
id="close"
>
Close
</Button>
<CSVLink
filename={"Time Detail Report.csv"}
data={this.state.timesheetlist}
className="btn btn-primary"
>
Download me
</CSVLink>
</Modal.Footer>
</Modal>
<Button variant="danger m-5" onClick={this.handleModelShow}>
Open Modal
</Button>
</>
);
}
}