react-use
Version:
Collection of React Hooks
29 lines (28 loc) • 919 B
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var react_1 = require("react");
function useRafLoop(callback) {
var raf = react_1.useRef(null);
var _a = react_1.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);
}
react_1.useEffect(function () { return clearCurrentLoop; }, []);
react_1.useEffect(function () {
clearCurrentLoop();
isActive && (raf.current = requestAnimationFrame(loopStep));
return clearCurrentLoop;
}, [isActive, callback]);
return [loopStop, isActive, loopStart];
}
exports.default = useRafLoop;