useRafFn
Call function on every requestAnimationFrame. With controls of pausing and resuming.
Usage
const Demo = () => {
const [ticks, setTicks] = useState(0);
const [lastCall, setLastCall] = useState(0);
const update = useUpdate();
const [loopStop, loopStart, isActive] = useRafFn((time) => {
setTicks(ticks => ticks + 1);
setLastCall(time);
});
return (
<div>
<div>RAF triggered: {ticks} (times)</div>
<div>Last high res timestamp: {lastCall}</div>
<br />
<button
onClick={() => {
isActive() ? loopStop() : loopStart();
update();
}}
>
{isActive() ? "STOP" : "START"}
</button>
</div>
);
};
Example
RAF triggered: 0 (times)
Last high res timestamp: 0
Type Declarations
export type RafLoopReturns = readonly [() => void, () => void, () => boolean]
export default function useRafFn(
callback: FrameRequestCallback,
initiallyActive?: boolean
): RafLoopReturns