@gdjiami/hooks
Version:
react hooks for mygzb.com
46 lines (40 loc) • 1.13 kB
JavaScript
import { useState, useEffect } from 'react';
export default function useInterval(_ref) {
var startImmediate = _ref.startImmediate,
callback = _ref.callback,
duration = _ref.duration;
var _useState = useState(0),
count = _useState[0],
updateCount = _useState[1];
var _useState2 = useState(startImmediate === undefined),
intervalState = _useState2[0],
setIntervalState = _useState2[1];
var _useState3 = useState(null),
intervalId = _useState3[0],
setIntervalId = _useState3[1];
useEffect(function () {
if (intervalState) {
var _intervalId = setInterval(function () {
updateCount(count + 1);
callback && callback(count);
}, duration);
setIntervalId(_intervalId);
}
return function () {
if (intervalId) {
clearInterval(intervalId);
setIntervalId(null);
}
};
}, [intervalState, count]);
return {
intervalId: intervalId,
state: intervalState,
start: function start() {
setIntervalState(true);
},
stop: function stop() {
setIntervalState(false);
}
};
}