MCPcopy Index your code
hub / github.com/streamich/react-use / useRafLoop

Function useRafLoop

src/useRafLoop.ts:5–54  ·  view source on GitHub ↗
(
  callback: FrameRequestCallback,
  initiallyActive = true
)

Source from the content-addressed store, hash-verified

3export type RafLoopReturns = [() => void, () => void, () => boolean];
4
5export default function useRafLoop(
6 callback: FrameRequestCallback,
7 initiallyActive = true
8): RafLoopReturns {
9 const raf = useRef<number | null>(null);
10 const rafActivity = useRef<boolean>(false);
11 const rafCallback = useRef(callback);
12 rafCallback.current = callback;
13
14 const step = useCallback((time: number) => {
15 if (rafActivity.current) {
16 rafCallback.current(time);
17 raf.current = requestAnimationFrame(step);
18 }
19 }, []);
20
21 const result = useMemo(
22 () =>
23 [
24 () => {
25 // stop
26 if (rafActivity.current) {
27 rafActivity.current = false;
28 raf.current && cancelAnimationFrame(raf.current);
29 }
30 },
31 () => {
32 // start
33 if (!rafActivity.current) {
34 rafActivity.current = true;
35 raf.current = requestAnimationFrame(step);
36 }
37 },
38 (): boolean => rafActivity.current, // isActive
39 // eslint-disable-next-line react-hooks/exhaustive-deps
40 ] as RafLoopReturns,
41 []
42 );
43
44 useEffect(() => {
45 if (initiallyActive) {
46 result[1]();
47 }
48
49 return result[0];
50 // eslint-disable-next-line react-hooks/exhaustive-deps
51 }, []);
52
53 return result;
54}

Callers 2

DemoFunction · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…