My solution is based on a front app React , redux and material-u and a backend Springboot app.
I have a Rest API that fetch a big number of records from the database. This creates a delay on the UI and I would like to prevent this.
Table component:
export default function Export(props) {
return (
<div>
<MaterialTable
title={<Typography variant="h6">{}</Typography>}
data={props.data}
options={{
pageSize: 50,
pageSizeOptions: [50, 100, 150],
search: true,
sorting: false,
headerStyle: {
fontWeight: "bold",
padding: "4px",
},
}}
></MaterialTable>
</div>
);
}
export const getExportByLastModifiedDate = (lastModifiedDate) => {
return async (dispatch) => {
dispatch({ type: EXPORT_BY_LASTMODIFEDDATE_START });
await axios({
method: "get",
url: "/api/export?lastModifiedDate=" + lastModifiedDate,
})
.then(function(response) {
dispatch({
type: EXPORT_BY_LASTMODIFEDDATE_SUCCESS,
payload: response.data,
});
})
.catch(function(error) {
dispatch({ type: EXPORT_BY_LASTMODIFEDDATE_ERROR, payload: error });
});
};
};
Backend API:
@GetMapping("/export")
public ResponseEntity<List<ExportDto>> getExportByLastModifiedDate(@RequestParam(value = "lastModifiedDate", required = true) String lastModifiedDate) {
Optional<List<ExportDto>> optional = Optional.ofNullable(service.getExportByLastModifiedDate(lastModifiedDate));
return optional.map(response -> ResponseEntity.ok().body(response)).orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND));
}
What I am trying to do is to get the first 1000 records and to render them to the UI while in the backend the process will continue.
How can I do that ?
Thank you
One possible solution may be adding pagination support in your
queryandbackend rest api. For example, first you call your backend withpage=0&pageSize=1000, this will return you first 1000 records, after this records are loaded, you will then call the backend withpage=1&pageSize=1000, this will return the next 1000 records.Spring boot has good pagination support for pagination if you are using
spring data jpa. If you are usingnative querythen, most databases has syntax supporting this kind of pagination and you need to modify your query for pagination.