reactjs - setState 每隔一秒调用一次
问题描述
我有一个简单的表单来设置passwordInvalid
.
状态最初是:
this.state = { email: '', passwordInvalid: false };
这email
部分很好,当我提交表单时它会更新。
改变的函数passwordInvalid
是:
passwordValidator = (email) => {
this.setState(() => {
if (email === 'test') {
this.setState({ passwordInvalid: true });
}
else {
this.setState({ passwordInvalid: false });
}
})
}
并且是这样调用的:
mySubmitHandler = (event) => {
this.passwordValidator(this.state.email);
if (this.state.passwordInvalid) {
event.preventDefault();
alert("Email: '" + this.state.email + "' is invalid.");
}
else {
event.preventDefault();
alert("Email address submitted: " + this.state.email);
}
}
我已经阅读了一些文档:
setState()
不会立即变异this.state
,而是创建一个挂起的状态转换。调用此方法后访问this.state
可能会返回现有值。无法保证调用的同步操作,setState
并且调用可能会被批处理以提高性能。
我尝试了许多设置状态的变体,但我似乎无法让它随着每次调用而更新;它仅适用于第二次通话。
解决方案
你不应该在 setState 中使用 setState,我认为你应该做的是这样的:
passwordValidator = email => {
if (email === "test") {
this.setState({ passwordInvalid: true });
} else {
this.setState({ passwordInvalid: false });
}
};
推荐阅读
- javascript - 输出如何在数组中有 4 个项目?
- angular - 如何将角度谷歌图表获取到 puppeteer
- python - 合并 3 个或更多数据帧
- ansible - Ansible:查找未使用的库存文件
- copy-paste - 选择 - 从 excel 复制粘贴多行时使输入文本多行
- javascript - 从嵌套字典中过滤字符串(javascript)
- oracle - 如何在 oracle 中仅选择外部事务(列值)?
- yocto - 配方中的校验和未检查
- javascript - 如何根据 axios 响应更新 vue 数据?
- vue.js - vue中如何判断和响应路由变化的不同方式