Created
May 17, 2022 15:43
-
-
Save jsamr/a06fb9bc095a60f3ac4b001ab86e2e0c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function useDelayedRendering<T>({ | |
element, | |
delay = 200, | |
}: { | |
element: T; | |
delay: number; | |
}) { | |
const [renderedEl, setRenderedEl] = useState(element); | |
const lastRenderedAt = useRef(Date.now()); | |
useEffect( | |
function delayRendering() { | |
const nextRenderAt = delay - (Date.now() - lastRenderedAt.current); | |
function updateElement() { | |
setRenderedEl(element); | |
lastRenderedAt.current = Date.now(); | |
} | |
if (renderedEl !== element && nextRenderAt <= 0) { | |
updateElement(); | |
} else { | |
// postpone rendering | |
const timeout = setTimeout(updateElement, nextRenderAt); | |
return () => clearTimeout(timeout); | |
} | |
}, | |
[delay, element, renderedEl] | |
); | |
return renderedEl; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment