@td-design/rn-hooks
Version:
从ahooks里面抽取的一些在rn项目里可以使用的hooks。提高开发效率
53 lines (49 loc) • 1.53 kB
JavaScript
;
var _tslib = require('../_virtual/_tslib.js');
var react = require('react');
var index = require('../useAppState/index.js');
var index$1 = require('../useMemoizedFn/index.js');
function useCountDown(seconds) {
var appState = index();
var timer = react.useRef();
var _a = _tslib.__read(react.useState(null), 2), target = _a[0], setTarget = _a[1];
var _b = _tslib.__read(react.useState(0), 2), count = _b[0], setCount = _b[1];
var start = index$1(function () {
setTarget(add(new Date(), seconds));
});
var stop = index$1(function () {
setTarget(null);
setCount(0);
});
react.useEffect(function () {
if (target === null || appState !== 'active')
return;
setCount(diff(new Date(), target));
timer.current = setInterval(function () {
setCount(diff(new Date(), target));
}, 1000);
return function () {
if (timer.current) {
clearInterval(timer.current);
timer.current = undefined;
}
};
}, [target]);
react.useEffect(function () {
if (count === 0) {
stop();
}
}, [count, stop]);
return {
count: count,
start: start,
stop: stop,
};
}
function add(date, seconds) {
return new Date(date.getTime() + seconds * 1000);
}
function diff(now, target) {
return Math.max(Math.trunc((target.getTime() - now.getTime()) / 1000 + 0.5), 0);
}
module.exports = useCountDown;