要为Material-UI表格创建一个可重用的选择过滤器,你可以使用React的组件化特性来封装过滤逻辑。以下是一个基本的示例,展示了如何创建一个可重用的选择过滤器组件,并将其应用于Material-UI表格。
以下是一个简单的可重用选择过滤器组件的实现,以及如何在Material-UI表格中使用它:
import React, { useState } from 'react';
import { Table, TableBody, TableCell, TableHead, TableRow, Select, MenuItem } from '@material-ui/core';
// 可重用的选择过滤器组件
function FilterSelector({ options, onChange }) {
const [selectedValue, setSelectedValue] = useState(options[0]);
const handleChange = (event) => {
setSelectedValue(event.target.value);
onChange(event.target.value);
};
return (
<Select value={selectedValue} onChange={handleChange}>
{options.map((option, index) => (
<MenuItem key={index} value={option}>
{option}
</MenuItem>
))}
</Select>
);
}
// 使用选择过滤器的表格组件
function FilterableTable({ data, filterOptions }) {
const [filteredData, setFilteredData] = useState(data);
const handleFilterChange = (filterValue) => {
const filtered = data.filter(item => item.category === filterValue);
setFilteredData(filtered);
};
return (
<>
<FilterSelector options={filterOptions} onChange={handleFilterChange} />
<Table>
<TableHead>
<TableRow>
<TableCell>ID</TableCell>
<TableCell>Name</TableCell>
<TableCell>Category</TableCell>
</TableRow>
</TableHead>
<TableBody>
{filteredData.map((row, index) => (
<TableRow key={index}>
<TableCell>{row.id}</TableCell>
<TableCell>{row.name}</TableCell>
<TableCell>{row.category}</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</>
);
}
// 示例数据和使用组件
const sampleData = [
{ id: 1, name: 'Item 1', category: 'A' },
{ id: 2, name: 'Item 2', category: 'B' },
{ id: 3, name: 'Item 3', category: 'A' },
];
const filterOptions = ['A', 'B'];
function App() {
return (
<div>
<FilterableTable data={sampleData} filterOptions={filterOptions} />
</div>
);
}
export default App;
handleFilterChange
函数正确地更新了filteredData
状态。memo
和useCallback
钩子来优化性能。通过这种方式,你可以创建一个灵活且可重用的选择过滤器,适用于各种需要数据过滤的场景。
领取专属 10元无门槛券
手把手带您无忧上云