UNPKG

@e-group/hooks

Version:

eGroup team react-hooks that share across projects.

49 lines (41 loc) 1.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useTimeout; var _react = require("react"); /** * https://github.com/streamich/react-use/blob/master/src/useTimeoutFn.ts */ function useTimeout(cb, ms) { const ready = (0, _react.useRef)(false); const timeout = (0, _react.useRef)(); const callback = (0, _react.useRef)(cb); const isReady = (0, _react.useCallback)(() => ready.current, []); const set = (0, _react.useCallback)(() => { ready.current = false; if (timeout.current) { clearTimeout(timeout.current); } if (ms !== null) { timeout.current = setTimeout(() => { ready.current = true; callback.current(); }, ms); } }, [ms]); const clear = (0, _react.useCallback)(() => { ready.current = null; if (timeout.current) { clearTimeout(timeout.current); } }, []); // update ref when function changes (0, _react.useEffect)(() => { callback.current = cb; }, [cb]); // set on mount, clear on unmount (0, _react.useEffect)(() => { set(); return clear; }, [ms]); return [isReady, clear, set]; }