一种可能的解决方法是将 Table 组件的 dataSource 属性直接赋值给一个变量,然后在搜索和重置事件中修改该变量的值,并将该变量重新赋值给 dataSource 属性。例如:
import React, { useState } from "react";
import { Table, Input, Button } from "antd";
const data = [
{ key: "1", name: "John Brown", age: 32, address: "New York No. 1 Lake Park" },
{ key: "2", name: "Jim Green", age: 42, address: "London No. 1 Lake Park" },
{ key: "3", name: "Joe Black", age: 32, address: "Sidney No. 1 Lake Park" },
{ key: "4", name: "Jim Red", age: 32, address: "London No. 2 Lake Park" },
];
const App = () => {
const [filters, setFilters] = useState({});
const handleSearch = (value) => {
const newFilters = {
...filters,
name: value,
};
setFilters(newFilters);
};
const handleReset = () => {
setFilters({});
};
let dataSource = [...data];
if (filters.name) {
dataSource = dataSource.filter((item) =>
item.name.toLowerCase().includes(filters.name.toLowerCase())
);
}
const columns = [
{
title: "Name",
dataIndex: "name",
},
{
title: "Age",
dataIndex: "age",
},
{
title: "Address",
dataIndex: "address",
},
];
return (
<>
>
);
};
export default App;
在上面的示例代码中,我们使用 useState 钩子函数来定义 filters 变量,并在 handleSearch 和 handleReset 函数中修改 filters 变量的值。然后,我们将 data 数组的副本赋值给 dataSource 变量,并根据 filters 变量的值来过滤数据,最后将 dataSource 变量赋值给 Table 组件的 dataSource 属性。这样,当用户搜索或重置数据时,表格会根据新的 filters 变量的值重新渲染数据。