reactjs - 反应直到第二次请求才返回最新状态
问题描述
我在表单组件中有以下方法:
validateForm () {
this.setState({isValid: true});
this.formFields.forEach(field => {
let isValid = field.ref.current.validateField();
console.log('Field isValid?', isValid);
if (!isValid) {
this.setState({isValid: false});
}
console.log('Form isValid?', this.state.isValid);
});
return this.state.isValid;
}
当它被调用时,它将表单状态设置isValid
为true
。然后循环遍历我们存储在 中的子组件formFields
并找出其中是否有任何无效,此时如果有任何返回无效响应,它将标记表单无效。
使用控制台日志,我发现表单的状态始终是以前的状态console.log('Form isValid?', this.state.isValid);
,直到我再次调用该方法,然后它返回正确的状态值......
我在 Rails 的 ActiveRecord 中看到过类似的情况,您需要调用reload
模型以确保由于缓存而获得最新状态...... React 有类似的东西吗?
解决方案
validateForm () {
let valid = true
this.formFields.forEach(field => {
let isValid = field.ref.current.validateField();
if (!isValid) {
valid = false;
}
});
if (!valid) {
this.setState({isValid: false});
}
return valid;
}
使用此代码。
setState()
是异步的。因此它不会在调用 setState() 后立即更改其值。它只会在下一次渲染时改变它的值
推荐阅读
- ruby-on-rails - Rails - 在同一页面上呈现活动部分?
- blazor - 检查是否设置了 EventCallback Blazor
- c++ - C++函数模板实参推导指南
- git - 恢复文件:错误:路径“app/controllers/conversations_controller.rb”未合并
- phoenix-framework - 如何使用 Phoenix 自定义布局呈现错误 404?
- javascript - 实例没有被垃圾回收
- jmeter - Jmeter证书记录测试的问题
- c++ - C++:用户输入给出了不需要的行为
- java - 为什么我无法在以系统用户身份启动的 java 应用程序中获取剪贴板数据?
- java - 写入 Avro 文件时更新架构