javascript - React 只允许用户数字 keydown 输入
问题描述
我试图有一个不允许用户输入数值的输入字段。(甚至不允许输入非数字或特殊字符值)。
SO 的常用方法之一是<input type="number" />
. 但是,它有两个问题:
1:箭头:我可以在另一个堆栈帖子之后摆脱它,这不是问题。2:输入字段仍然允许负叹号“-”作为输入。
我也试过:<input type="text" pattern="[0-9]*" onChange={this.handleInputToken}/>
handleInputToken(e){
console.log(e.currentTarget.value)
}
但这仍然允许非数字输入
是否存在允许这种简单实现的现有 npm 模块或库?因为它感觉像是表单数据非常常见的东西。
解决方案
您可以构建一个类型化的输入组件并拥有任何逻辑。
这是非常非常基本的,未经测试,但会拒绝接受任何不强制为数字并保留旧值的东西,有效地默默地丢弃任何不好的东西。它仍然会接受负数,但您可以扩展 handleChange 来修复它
class NumericInput extends React.Component {
state = {
value: ''
}
handleChange = e => {
const { onChange } = this.props;
const value = e.target.value.trim();
const num = Number(value);
let newValue = this.state.value;
if (!isNaN(num) && value !== '') {
newValue = num;
}
else if (value === ''){
newValue = value;
}
this.setState({
value: newValue
}, () => onChange && onChange(this.state.value));
}
render() {
const { onChange, ...rest } = this.props;
return <input {...rest} value={this.state.value} onChange={this.handleChange} />;
}
}
https://codesandbox.io/s/zq5ooml10l
显然,您可以使用与上游static getDerivedStateFromProps()
保持value={}
同步并将其作为真正的“受控”组件
推荐阅读
- c# - 添加新包会破坏 .NET 5 应用程序
- python - matplotlib:一个子图的 x 轴与另一个子图的 y 轴共享
- java - 错误:从 Spring Boot 和 SQL Server 制作的 API 获取重复列表记录
- python - 打印包含每个查询的准确率、精确度、召回率和 F1 分数的字典
- java - 在spring rest模板中传递字符串和整数类型的查询参数
- javascript - 文件上传后重新加载 Express 服务器
- python-3.x - 将 Ctrl-C 发送到子进程
- java - Spring Data REST:无法按 LocalDateTime 字段排序
- ssl - 将私有 ca 证书导入为受信任的根证书颁发机构后,chrome 浏览器中的“不安全”警告
- azure-web-app-service - Azure 应用服务在诊断中显示崩溃,但没有指标/警报选项