UNPKG

@td-design/rn-hooks

Version:

从ahooks里面抽取的一些在rn项目里可以使用的hooks。提高开发效率

53 lines (49 loc) 1.53 kB
'use strict'; 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;