@td-design/react-native
Version:
react-native UI组件库
57 lines (56 loc) • 1.46 kB
JavaScript
import { useEffect } from 'react';
import { useMemoizedFn, useSafeState } from '@td-design/rn-hooks';
import Toast from '../toast';
import { formatValue } from './util';
export default function useNumberKeyboard(_ref) {
let {
type,
value,
onChange,
onCheck,
digit = 0,
placeholder = '请输入'
} = _ref;
const [currentText, setCurrentText] = useSafeState();
useEffect(() => {
setCurrentText(value ?? placeholder ?? '');
}, [value, placeholder]);
/**
* 根据type对value进行合法性校验
*/
const handleSubmit = async value => {
// 对value进行校验,判断是否是数字,支持负数
if (!/^-?\d*\.?\d*$/.test(value)) {
Toast.middle({
content: '请输入正确的数字格式'
});
return;
}
try {
const text = formatValue(value, type, digit) + '';
await (onCheck === null || onCheck === void 0 ? void 0 : onCheck(text));
if (onChange) {
onChange(`${text}`);
} else {
setCurrentText(text || placeholder);
}
} catch (error) {
Toast.middle({
content: error.message
});
}
};
const handleInputClear = () => {
if (onChange) {
onChange();
} else {
setCurrentText(placeholder);
}
};
return {
currentText,
handleSubmit: useMemoizedFn(handleSubmit),
handleInputClear: useMemoizedFn(handleInputClear)
};
}
//# sourceMappingURL=useNumberKeyboard.js.map