我尝试实现DataTable
的惰性选项。在official example中,仅使用onPage
事件。但是,如果我需要一起使用column filter,paging和sorting,该怎么办?这是我需要开发的工作流程吗?
parameter list
中收集所有排序,筛选,分页parameter list
发送到后端parameter list
过滤数据如果这是工作流程,那该怎么办,因为我没有看到任何全局事件会从DataTable
收集所有参数。
我创建了一个test case,其中CarService
类应该一起基于事件参数过滤数据。将此CarService
视为后端。
App
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>
);
}
}
CarService
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;
}
}
[[UPDATE] for PrimeReact版本<3.x:
[PrimeReact DataTable(在lazy模式下设置)具有onLazyLoad
事件,在以下情况下会被调用]
例如,可以声明带有onLazyLoad
事件的数据表
<DataTable value={this.state.cars} paginator={true} lazy={true}
rows={5} rowsPerPageOptions={[5, 10, 20]}
totalRecords={this.state.totalRecords}
onLazyLoad={this.onLazyLoad} ... >
onLazyLoad
功能可以在哪里
onLazyLoad = (event) => {
console.log("On Lazy load event", event);
this.carservice.getLazyCars(event)...
}
并且event
参数/对象具有以下属性
您可以找到here的更多详细信息(另一些神秘的功能)。
[[UPDATE]对于PrimeReact版本> 3.x:
onLazyLoad
事件已从库中删除。现在可以通过数据表的state
属性访问上述相关的“惰性参数”。
向数据表添加引用
<DataTable ref={(el) => this.datatable = el} ... >
并在需要时从this.datatable.state
对象中检索“惰性参数”(过滤器,sortField,sortOrder,first,multiSortMeta)。例如
onPage = (event) => {
console.log("Data table state", this.datatable.state)
//get filtered data using lazy params
//...
}