javascript - 反应输入类型号 onChange 很慢
问题描述
我想设置一个输入,用户只能使用正则表达式输入数字和一个点(例如 number.number(8 位))。
// component A
<Input
name="password"
value={this.props.password}
onChange={this.props.onChange}
/>
.
// component B
state = { password : '' }
handleChange = (e) => {
const value = e.target.value;
const regexAllowOneDot = /\d+(\.?\d{0,8})/;
if(regexAllowOneDot.exec(value) !== null) {
this.setState({
password: regexAllowOneDot.exec(value)[0]
})
}else {
this.setState({
password: ''
})
}
}
<ComponentA
password={this.state.password}
onChange={this.handleChange}
/>
.
当输入类型为“文本”时它有效,但当类型为“数字”时它不起作用。
所以,当类型是“数字”时,我会在下面得到这些问题(但是,当类型是“文本”时,这些问题完全解决了)
当我从 Chrome 检查开发人员工具时,输入的值没有改变(但 e.target.value 有效)
此外,当我检查时
console.log(regexAllowOneDot.exec(value)[0])
,即使该值仍然具有一位数(长度,如 1 或 2 或...),它仍显示为 null
我想知道为什么以及如何解决此问题,或者您是否有更好的解决方案。
解决方案
好的,我现在明白了。您想处理 keyPress 事件并在必要时停止它,如下所示:
keyPress = e => {
if (e.which === 46 && this.state.amount.includes(".")) {
e.preventDefault();
e.stopPropagation();
}
};
然后将该函数向下传递给子组件并将其附加到 onKeyPress。
我已经包含了您的代码的工作分支,这里解决了问题:https ://codesandbox.io/s/7wnz19156x?codemirror=1&fontsize=14
推荐阅读
- c# - 具有自定义属性的 AutoMapper [AutoMapper]:如何在属性上添加条件
- ruby-on-rails - 使用设计设置后为用户添加路线?
- swift - Swift Decodable - 如何避免泛型类型?
- javascript - 异步等待模块包含 axios 返回 Promise
- mysql - 在 Django 中为 bulk_create 动态计算 batch_size
- python - Python3 numpy.fft.fft() 与 Python2 numpy.fft.fft()
- r - 基于两列的子集自动回归
- dynamics-crm - Dynamics 365 for Government - 身份验证方法
- javascript - 确保输入值是reactjs中的字母字符串
- visual-studio - VS Code - 如何连接到远程存储库