【发布时间】:2019-12-10 13:58:50
【问题描述】:
我尝试实现DataTable 的惰性选项。在official example 中,仅使用onPage 事件。但是如果我需要同时使用列过滤器、分页和排序怎么办?这是我需要开发的工作流程吗?
- 客户端在
parameter list中收集所有排序、过滤、分页 - 客户端发送
parameter list到后端 - 后端根据
parameter list过滤数据 - 后端将新数据发送给客户端
- 客户端通过使用新的更新数据更新状态来更新数据表
如果这是工作流程,那么我该怎么做,因为我没有看到任何从 DataTable 收集所有参数的全局事件。
我创建了一个test case,其中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;
}
}
【问题讨论】:
标签: reactjs lazy-loading primereact