【发布时间】:2021-08-24 07:48:35
【问题描述】:
反应应用。授权表格。在用户输入时,我正在检查用户是否写了正确的东西(电子邮件的电子邮件和密码的拉丁字符 + 数字)
问题是,它不是在键入时在浏览器中显示结果,而是在一个字符之后显示。 例子:
- 应该从第一个字符开始检查,但不: Starting to enter smth
- 应该已经显示消息,一切正常,但没有。仅在 + 输入一个额外符号后显示: Finishing typing email Added a space and it worked
输入如下:
<input
type='text'
placeholder='Email'
name='login'
required
onChange={this.handleChange}
/>
处理程序(登录部分,密码相同):
handleChange(event) {
this.setState({
field: event.target.name,
});
if (this.state.field === 'login') {
this.setState({
loginValue: event.target.value,
});
const result = this.checkLogin(this.state.loginValue);
if (result == true) {
this.setState({loginErrorMessage: "Email true", loginValid: true})
} else {
this.setState({loginErrorMessage: result.message.toString(), loginValid: false})
}
}
}
检查功能:
checkLogin(value) {
try {
if (value.match(/^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}$/) == null) {
throw new Error("Value must be email");
}
else {
return true
}
} catch (myError) {
return myError
}
}
我是一般状态管理的新手,尤其是 React。我想我在错误的地方改变了状态。请帮忙。
【问题讨论】:
标签: javascript reactjs validation web state