UNPKG

@td-design/rn-hooks

Version:

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

75 lines (72 loc) 2.78 kB
import { __read, __awaiter, __generator, __spreadArray } from '../_virtual/_tslib.js'; import { useState, useEffect } from 'react'; import useCountDown from '../useCountdown/index.js'; import useMemoizedFn from '../useMemoizedFn/index.js'; /** * 用于发送手机验证码的 hook。 * @param props 参数 */ function useSms(_a) { var _this = this; var _b = _a.defaultLabel, defaultLabel = _b === void 0 ? '发送验证码' : _b, _c = _a.resendLabel, resendLabel = _c === void 0 ? '重新发送' : _c, _d = _a.count, count = _d === void 0 ? 60 : _d, onBefore = _a.onBefore, onSend = _a.onSend, onAfter = _a.onAfter, ref = _a.ref; var _e = useCountDown(count), currentCount = _e.count, start = _e.start; var _f = __read(useState(''), 2), text = _f[0], setText = _f[1]; var _g = __read(useState(false), 2), started = _g[0], setStarted = _g[1]; useEffect(function () { if (currentCount === 0) { onAfter === null || onAfter === void 0 ? void 0 : onAfter(); setStarted(false); } }, [currentCount]); useEffect(function () { if (!started) { setText(defaultLabel); } else if (currentCount !== 0) { setText("".concat(resendLabel, "(").concat(currentCount, "s)")); } else { setText(resendLabel); } }, [currentCount, defaultLabel, resendLabel]); /** * 发送验证码 */ var sendSms = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return __awaiter(_this, void 0, void 0, function () { var validateResult; return __generator(this, function (_a) { switch (_a.label) { case 0: validateResult = true; if (!onBefore) return [3 /*break*/, 2]; return [4 /*yield*/, onBefore()]; case 1: validateResult = _a.sent(); _a.label = 2; case 2: if (validateResult) { if (ref) { ref.current.focus(); } onSend.apply(void 0, __spreadArray([], __read(args), false)); // 开始倒计时 start(); setStarted(true); } return [2 /*return*/]; } }); }); }; return { text: text, disabled: started, sendSms: useMemoizedFn(sendSms), }; } export { useSms as default };