UNPKG

985 BJavaScriptView Raw
1import { useEffect } from 'react';
2import useCommittedRef from './useCommittedRef';
3
4function useRafInterval(fn, ms, paused) {
5 if (paused === void 0) {
6 paused = false;
7 }
8
9 var handle;
10 var start = new Date().getTime();
11 var fnRef = useCommittedRef(fn); // this ref is necessary b/c useEffect will sometimes miss a paused toggle
12 // orphaning a setTimeout chain in the aether, so relying on it's refresh logic is not reliable.
13
14 var pausedRef = useCommittedRef(paused);
15
16 function loop() {
17 var current = new Date().getTime();
18 var delta = current - start;
19 if (pausedRef.current) return;
20
21 if (delta >= ms && fnRef.current) {
22 fnRef.current();
23 start = new Date().getTime();
24 }
25
26 cancelAnimationFrame(handle);
27 handle = requestAnimationFrame(loop);
28 }
29
30 useEffect(function () {
31 handle = requestAnimationFrame(loop);
32 return function () {
33 return cancelAnimationFrame(handle);
34 };
35 }, []);
36}
37
38export default useRafInterval;
\No newline at end of file