react-use
Version:
Collection of React Hooks
26 lines (25 loc) • 816 B
JavaScript
import { useEffect, useRef, useState } from 'react';
export default function useRafLoop(callback) {
var raf = useRef(null);
var _a = useState(true), isActive = _a[0], setIsActive = _a[1];
function loopStep() {
callback();
raf.current = requestAnimationFrame(loopStep);
}
function loopStop() {
setIsActive(false);
}
function loopStart() {
setIsActive(true);
}
function clearCurrentLoop() {
raf.current && cancelAnimationFrame(raf.current);
}
useEffect(function () { return clearCurrentLoop; }, []);
useEffect(function () {
clearCurrentLoop();
isActive && (raf.current = requestAnimationFrame(loopStep));
return clearCurrentLoop;
}, [isActive, callback]);
return [loopStop, isActive, loopStart];
}