Problem
The following if statement blocks loading new page if page is already loading.
const handleLoadPage = useCallback(async (page: number, clearCache: boolean) => {
if (loading.includes(page)) return;
This makes pages not load on filter changes if loading is longer than expected, for example:
- Loading page 1...
- Change filter/order/... -> triggers handleLoadPage bug ignored
- Loaded page 1
Proposed solution
This line was added to reduce number of repeated requests during table re-rendering when page is already loading - bad implementation.
Always load last requested page even if already loading, discard old page load data when promise resolved and only keep last requested.
useEffect(() => {
let ignore = false;
try {
const data = await getData();
if (!ignore) {
setData(data);
}
}
catch(err) {
if (!ignore) {
throw err;
}
}
return () => { ignore = true; };
}, [prop1, prop2, prop3]);
Problem
The following
ifstatement blocks loading new page if page is already loading.This makes pages not load on filter changes if loading is longer than expected, for example:
Proposed solution
This line was added to reduce number of repeated requests during table re-rendering when page is already loading - bad implementation.
Always load last requested page even if already loading, discard old page load data when promise resolved and only keep last requested.