Hello
I have a grid with many records in my DB. I want to only request the data that will be displayed on the selected page.
Ex. If I navigate to page 5 with a pageSize of 20, I will skip the first 80 records and receive the next 20.
This is working so far, but my issue is that when I receive those 20 records of data ; page 5 will show up empty since the data will only be displayed on page 1.
If i load all the data without splitting them, the program will crash.
I found a solution for angular, jquery (using serverPaging) but not with React.
What can I do to display my data on the specific page I'm on (in React), and basically ignore all the other pages when I'm not visiting them?
Thank you
this is my source code :
import { Grid, GridColumn } from '@progress/kendo-react-grid';import React from 'react';import ReactDOM from 'react-dom';import axios from "axios";import { filterBy } from '@progress/kendo-data-query';class GridDocInput extends React.Component {// c'est valeur sont a gardé uniquement dans le devterminalId = window.SERVER_DATA.terminalid;functionId = window.SERVER_DATA.functionid;hostname = window.SERVER_DATA.hostname;funct = window.SERVER_DATA.funct;// Let's our app know we're ready to render the datacomponentDidMount() {this.getPosts();} state = { filter: { logic: "and", filters: [] }, skip: 0, take: 25, pageNumber: 1, posts: [], total_record: 10000 }; pageChange = (event) => { this.setState({ skip: event.page.skip, take: event.page.take, pageNumber: (event.page.skip + event.page.take) / 25 },()=>{this.getPosts();}); } render() { return ( <div> <Grid style={{ height: '100%' }} data={filterBy(this.state.posts,this.state.filter).slice(this.state.skip, this.state.take + this.state.skip)} skip={this.state.skip} take={this.state.take} total={this.state.total_record} onPageChange={this.pageChange} pageable filterable sortable filter={this.state.filter} onFilterChange={(e) => { this.setState({ filter: e.filter }); }} > <GridColumn field="item_no" title="Code article"/> <GridColumn field="description1" title="Description" /> <GridColumn field="uom_code" title="UOM code"/> <GridColumn field="vendor_code" title="Code vendeur" /> </Grid> </div > ); } getPosts() { axios // This is where the data is hosted .post( this.hostname+`in/ui/xitem.p?terminalid=` + this.terminalId + "&Funct=" + this.funct + "&FunctionID=" + this.functionId + "&pageSize=25" + "&skip=" + this.state.skip + "&take=" + this.state.take + "&page=" + this.state.pageNumber +"&lastRecord=false" ) // Once we get a response and store data, let's change the loading state .then(response => { this.setState({ posts: response.data.ProDataSet.tt_item, total_record: response.data.ProDataSet.tt_Misc[0].total_record, isLoading: false }); }) // If we catch any errors connecting, let's update accordingly .catch(error => this.setState({ error, isLoading: false })); console.log("url: ", this.hostname+`in/ui/xitem.p?terminalid=` + this.terminalId + "&FunctionID=" + this.functionId + "&pageSize=25" + "&skip=" + this.state.skip + "&take=" + this.state.take + "&page=" + this.state.pageNumber ); }}export default GridDocInput;
