rooks
Version:
Essential React custom hooks ⚓ to super charge your components!
53 lines (52 loc) • 1.7 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.useRaf = void 0;
var raf_1 = __importDefault(require("raf"));
var react_1 = require("react");
var noop_1 = require("../utils/noop");
/**
*
* useRaf
* Uses a polyfilled version of requestAnimationFrame
*
* @param {Function} callback The callback function to be executed
* @param {boolean} [isActive] The value which while true, keeps the raf running infinitely
* @see https://react-hooks.org/docs/useRaf
*/
function useRaf(callback, isActive) {
var savedCallback = (0, react_1.useRef)();
// Remember the latest function.
(0, react_1.useEffect)(function () {
savedCallback.current = callback;
}, [callback]);
(0, react_1.useEffect)(function () {
var animationFrame;
var startTime = Date.now();
function tick() {
var _a;
var timeElapsed = Date.now() - startTime;
startTime = Date.now();
loop();
(_a = savedCallback.current) === null || _a === void 0 ? void 0 : _a.call(savedCallback, timeElapsed);
}
function loop() {
animationFrame = (0, raf_1.default)(tick);
}
if (isActive) {
startTime = Date.now();
loop();
return function () {
if (animationFrame) {
raf_1.default.cancel(animationFrame);
}
};
}
else {
return noop_1.noop;
}
}, [isActive]);
}
exports.useRaf = useRaf;