@td-design/rn-hooks
Version:
从ahooks里面抽取的一些在rn项目里可以使用的hooks。提高开发效率
77 lines (73 loc) • 2.78 kB
JavaScript
;
var _tslib = require('../_virtual/_tslib.js');
var react = require('react');
var index = require('../useCountdown/index.js');
var index$1 = require('../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 = index(count), currentCount = _e.count, start = _e.start;
var _f = _tslib.__read(react.useState(''), 2), text = _f[0], setText = _f[1];
var _g = _tslib.__read(react.useState(false), 2), started = _g[0], setStarted = _g[1];
react.useEffect(function () {
if (currentCount === 0) {
onAfter === null || onAfter === void 0 ? void 0 : onAfter();
setStarted(false);
}
}, [currentCount]);
react.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 _tslib.__awaiter(_this, void 0, void 0, function () {
var validateResult;
return _tslib.__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, _tslib.__spreadArray([], _tslib.__read(args), false));
// 开始倒计时
start();
setStarted(true);
}
return [2 /*return*/];
}
});
});
};
return {
text: text,
disabled: started,
sendSms: index$1(sendSms),
};
}
module.exports = useSms;