javascript - React 表单中的 onSubmit 验证问题
问题描述
我有一个简单的设置来验证一些表单条目。它只推送第一个条目的验证。所以在状态我有:
this.state = {
username: '',
email: '',
zip: '',
errors:[]
}
submit
按钮:
<div>
<button onClick={this.handleSubmit}
>submit
</button>
</div>
提交按钮和表单都触发handleSubmit
:
handleSubmit(e) {
e.preventDefault();
this.setState({errors:[]});
const {username, email, zip} = this.state;
const errors = validate(username, email, zip);
if (errors.length>0) {
this.setState({errors});
}
}
命中validate
:
function validate(username, email, zip) {
let validEmail = RegExp(/[^@ \t\r\n]+@[^@ \t\r\n]+\.[^@ \t\r\n]+/);
let validZip = RegExp(/^\d{5}$/);
const errors = [];
if (username.length < 3 || null) {
errors.push('Name must be at least 3 characters long.');
}
if (validEmail.test(email)) {
errors.push('Email address must be valid email address.');
}
if (validZip.test(zip)) {
errors.push('Zip code must be 5 digits.')
}
console.log(errors);
return errors;
}
然后,从更新的状态,错误应该打印为行项目:
<ul className="errorList">
{this.state.errors.map(
(error =>
<li key={error}>
{error}
</li>
)
)}
</ul>
但只有第一个验证username
在控制台日志和无序列表中有效(for )。
求指教^~^
解决方案
validEmail.test(email)
return ,如果邮件失败false
,try!validEmail.test(email)
会返回true
推荐阅读
- android - ArCore .obj FileNotFound 异常
- c - 带有 OpenSSL 后端的 libcurl 中的虚假服务器名称指示 (SNI)
- vba - 调试 Levenshtein 距离实现 - 如何计算最小距离?
- java - 重新创建片段后微调器文本变为空白/白色
- java - 我的 java 客户端不适用于我的 python 服务器
- java - 使用firebase android卡在阻止用户彼此之间的功能中
- python - ValueError:发现样本数量不一致的输入变量:[4, 103]
- javascript - 如何解决未捕获(承诺),无法在网络摄像头媒体设备上设置属性“innerHTML”为空
- android - 使用 Google Maps Android API 构建派对应用?
- html - 选定的 div 不应悬停在幻灯片中 [JsFiddle]