UNPKG

vtils

Version:

一个面向业务的 JavaScript/TypeScript 实用程序库。

53 lines (52 loc) 1.65 kB
"use strict"; exports.__esModule = true; exports.useInterval = useInterval; var _react = require("react"); var _reactUse = require("react-use"); /** * 以一定的间隔时间重复调用某函数,并返回调用结果。 * * @param callback 回调函数 * @param delay 间隔时间(毫秒),非数字时将不调用或停止调用函数 * @param duration 持续时间(毫秒) * @returns 返回调用结果 */ function useInterval(callback, delay, duration) { var _useState = (0, _react.useState)(), result = _useState[0], setResult = _useState[1]; var latestCallback = (0, _reactUse.useLatest)(callback); var latestDelay = (0, _reactUse.useLatest)(delay); var latestDuration = (0, _reactUse.useLatest)(duration); var interval = (0, _react.useRef)(); var stop = (0, _react.useCallback)(function () { if (interval.current) { clearInterval(interval.current); } }, []); var start = (0, _react.useCallback)(function (delay, duration) { var _delay, _duration; stop(); delay = (_delay = delay) != null ? _delay : latestDelay.current; duration = (_duration = duration) != null ? _duration : latestDuration.current; if (typeof delay === 'number') { setResult(latestCallback.current()); interval.current = setInterval(function () { setResult(latestCallback.current()); }, delay); } if (typeof duration === 'number') { setTimeout(function () { stop(); }, duration); } }, []); (0, _react.useEffect)(function () { start(); return stop; }, [delay]); return [result, { start: start, stop: stop }]; }