UNPKG

react-use

Version:
26 lines (25 loc) 816 B
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]; }