我尝试实现DataTable
. 在官方示例中,仅使用onPage
事件。但是如果我需要同时使用列过滤器、分页和排序呢?这是我需要开发的工作流程吗?
- 客户端收集所有排序、过滤、分页
parameter list
- 客户端发送
parameter list
到后端 - 后端根据
parameter list
- 后端将新数据发送给客户端
- 客户端通过使用新的更新数据更新状态来更新数据表
如果这是工作流程,那么我该怎么做,因为我没有看到任何从DataTable
.
我创建了一个测试用例,CarService
该类应该根据事件参数一起过滤数据。将此CarService
视为后端。
应用程序
export class App extends Component<{}, State> {
carService = new CarService();
constructor(props) {
super(props);
this.state = {
cars: this.carService.getCars()
};
}
onSort = (event: any) => {
this.setState({ cars: this.carService.getFilteredCars(event) });
};
onPage = (event: any) => {
this.setState({ cars: this.carService.getFilteredCars(event) });
};
onFilter = (event: any) => {
this.setState({ cars: this.carService.getFilteredCars(event) });
};
render() {
return (
<div className="App">
<DataTable
value={this.state.cars}
paginator={true}
lazy={true}
rows={2}
rowsPerPageOptions={[2, 4]}
onSort={this.onSort}
onPage={this.onPage}
onFilter={this.onFilter}
>
<Column field="vin" header="Vin" filter sortable />
<Column field="year" header="Year" filter sortable />
</DataTable>
</div>
);
}
}
汽车服务
export class CarService {
cars = [
{ vin: "aaa", year: 1980 },
{ vin: "bbb", year: 1981 },
{ vin: "ccc", year: 1982 },
{ vin: "ccc", year: 1983 },
{ vin: "csdd", year: 1984 },
{ vin: "cgg", year: 1982 },
{ vin: "cyy", year: 1982 }
];
getCars() {
return this.cars;
}
getFilteredCars(filter: string) {
// filter the cars based on the filter
// an example filter could be: ?name=TestName&page=1
return this.cars;
}
}