@gdjiami/hooks
Version:
react hooks for mygzb.com
34 lines (33 loc) • 1.22 kB
JavaScript
import { __read } from "tslib";
import { useState, useEffect } from 'react';
export default function useInterval(_a) {
var startImmediate = _a.startImmediate, callback = _a.callback, duration = _a.duration;
var _b = __read(useState(0), 2), count = _b[0], updateCount = _b[1];
var _c = __read(useState(startImmediate === undefined), 2), intervalState = _c[0], setIntervalState = _c[1];
var _d = __read(useState(null), 2), intervalId = _d[0], setIntervalId = _d[1];
useEffect(function () {
if (intervalState) {
var intervalId_1 = setInterval(function () {
updateCount(count + 1);
callback && callback(count);
}, duration);
setIntervalId(intervalId_1);
}
return function () {
if (intervalId) {
clearInterval(intervalId);
setIntervalId(null);
}
};
}, [intervalState, count]);
return {
intervalId: intervalId,
state: intervalState,
start: function () {
setIntervalState(true);
},
stop: function () {
setIntervalState(false);
},
};
}