import React from 'react';
import {StyleSheet, TextInput, TextInputProps, TextStyle} from 'react-native';
interface Props extends Omit<TextInputProps, 'value'> {
style?: TextStyle;
min?: number;
max?: number;
value?: string;
onChangeValue: (value?: string) => any;
minus?: boolean;
decimal?: boolean;
}
export default function (props: Props) {
const {decimal = false, minus = false} = props;
const {style, value = '', onChangeValue, min, max, ...other} = props;
function onChangeText(val: string) {
// 没有输入值直接返回
if (!val) {
onChangeValue('');
return;
}
// 不能输入小数
if (!decimal && val.includes('.')) {
onChangeValue(val.indexOf('.') > 0 ? value : '');
return;
}
// 不能输入负数
if (!minus && val.includes('-')) {
onChangeValue('');
return;
}
// 能输入小数但是输入的规则不对
let boo =
val.includes('.') &&
(val.indexOf('.') == 0 || val.replace('.', '').length != val.length - 1);
if (decimal && boo) {
onChangeValue(value);
return;
}
// 能输入负数但是输入的规则不对
boo =
val.includes('-') &&
(val.indexOf('-') > 0 || val.replace('-', '').length != val.length - 1);
if (minus && boo) {
onChangeValue('');
return;
}
// 能输入负数切只输入了-符号时
if (val == '-') {
onChangeValue(val);
return;
}
let v = Number(val);
// 没有最大值和最小值限制
if (min == null && max == null) {
onChangeValue(val);
return;
}
// 最大值和最小值都有
if (min != null && max != null && v <= max && min <= v) {
onChangeValue(val);
return;
}
// 只有最小值
if (min != null && v < min) {
onChangeValue(value);
return;
}
// 只有最大值
if (max != null && max <= v) {
onChangeValue(value);
return;
}
}
return (
<TextInput
{...other}
style={[st.input, style]}
keyboardType="numeric"
value={String(value)}
onChangeText={onChangeText}
/>
);
}
const st = StyleSheet.create({
input: {},
});
RN的NumberInput组件
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 在本章和后面的章节中,将通过具体的Demo来介绍相关内容。 Demo只介绍大体的用法。一些细节的东西,都在代码注释...
- 【简述RN集成到Android原生项目】【RN系列:Android原生与RN如何交互通信】 其实RN中已存在部分控...
- 在本教程的开始,就曾经提到过纯Rn和原生与RN混合开发的两种概念。之前的两个Demo如果不考虑难易程度的话,...
- 这应该是最后一篇关于RN的文章,因为公司决定RN转原生,至于为什么转呢?可能是因为原生才是王道吧! 直入主题:在红...