@darwish/hooks-core
Version:
31 lines (30 loc) • 1.12 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var react_1 = require("react");
var useUnmount_1 = __importDefault(require("./useUnmount"));
/**
* @description 用 requestAnimationFrame 来更新 state
* @param initialState initial state
* @returns [state, setState]
* @example
* const [state, setState] = useRafState(0);
* const [state, setState] = useRafState(() => 0);
*/
var useRafState = function (initialState) {
var frame = (0, react_1.useRef)(0);
var _a = (0, react_1.useState)(initialState), state = _a[0], setState = _a[1];
var setRafState = (0, react_1.useCallback)(function (value) {
cancelAnimationFrame(frame.current);
frame.current = window.requestAnimationFrame(function () {
setState(value);
});
}, []);
(0, useUnmount_1.default)(function () {
window.cancelAnimationFrame(frame.current);
});
return [state, setRafState];
};
exports.default = useRafState;