reactjs - OnChange 中缺少 React State 字段
问题描述
我正在尝试在 React 中验证表单。每次在字段中更改输入时,我都会尝试验证它:
// Consutructor
this.state{
Form_errors:
Key1: false,
Key2: false
}
handleChange(e, name){
this.setState({
[name]: e.target.valueAsNumber
});
// validate fields
this.validate_field(e, name);
}
然后在表单提交时,我检查每个字段是否为真:
handle_submit(e){
e.preventDefault();
// validate form immediately
this.validate_form();
}
validate_form(){
// check all fields are true
for (var field in this.state.form_errors) {
if(!this.state.form_errors[field]){
this.setState({
validated: false
});
return false;
}
}
this.setState({
validated: true
});
}
在这个阶段,validate_form()
只看到最近更新的字段handleChange
,所以在 1 次迭代后返回 true。如果我console.log
是当前状态,则只有当前键值存在,其他键值不存在。
我也有条件类,render()
一次只能看到一个字段。
为什么剩下的字段不见了state
?
解决方案
当仅更新一个属性时,状态正在重置。
this.setState({
[property]: newVal
});
这意味着这this.state.property2
将被“遗忘”。正在做:
this.setState({
...this.state,
[property]: newVal
});
推荐阅读
- ios - 如何使用 SwiftUI 显示全栈模式?
- microservices - 带有多个顶级定义文件的 Swagger-ui
- excel - 在excel中的单元格范围内查找字母数字值
- android - 使用 ConstraintLayout Kotlin 视图超出屏幕
- python - Django:具有多级嵌套的查询集过滤器
- typescript - TypeScript:如何指定需要参数的构造函数的类型?
- javascript - 尝试重定向时出错。ctx.res.redirect 不是函数
- c# - 为什么使用 ASCI 将 char 转换为 int 比使用 int.parse() 解析 char 更快?
- javascript - 方法 fetch post 慢慢地将我的信息添加到状态
- c# - 需要字符串连接帮助