Skip to content

Instantly share code, notes, and snippets.

@EnzoPortela
Created April 23, 2023 11:43
Show Gist options
  • Save EnzoPortela/c16f5cd5a15b2f60ba570ecd20584952 to your computer and use it in GitHub Desktop.
Save EnzoPortela/c16f5cd5a15b2f60ba570ecd20584952 to your computer and use it in GitHub Desktop.
React component to render giants lists
export function Defer({ chunkSize, children }: DeferProps) {
const [renderedItemsCount, setRenderedItemsCount] = useState(chunkSize);
const childrenArray = useMemo(
() => Children.toArray(children),
[children]
);
useEffect(() => {
if (renderedItemsCount < childrenArray.length) {
window.requestIdleCallback(
() => {
setRenderedItemsCount(
Math.min(renderedItemsCount + chunkSize, childrenArray.length)
);
},
{ timeout: 200 }
);
}
}, [renderedItemsCount, childrenArray.length, chunkSize]);
return <>{childrenArray.slice(0, renderedItemsCount)}</>;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment