javascript-React钩子setState不会立即更新
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-React钩子setState不会立即更新,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1390字,纯文字阅读大概需要2分钟。
内容图文
单击提交按钮时,我试图验证字段.这就是我定义状态的方式.
const [values, setValues] = useState({
email: "",
password: "",
emailErrorMessage: "",
passwordErrorMessage: "",
errorMessage: "",
emailError: false,
passwordError: false,
rememberMe: false,
});
在提交方法中,这就是我对其进行验证的方式.
if (values.email.length <= 0) {
setValues({
...values,
emailError: true,
emailErrorMessage: "Email field must not be empty"
})
};
if (values.password.length <= 0) {
setValues({ ...values, passwordError: true, passwordErrorMessage: "Password field must not be empty" });
}
由于某种原因,它仅显示密码字段错误.尽管它同时经历了两个if条件.不知道我怎么能解决它.
预期:-它应该同时显示电子邮件和密码错误.
解决方法:
问题1:状态更新是一个异步过程,因此,在您的情况下,您是通过扩展当前状态来第一次更新状态,然后通过也扩展当前状态来进行第二次更新状态(尚未更新).结果,成功更新的最后一个状态(实际上是一场赌博,第二次更新的运气更大)将是实际的nextState,这就是为什么您遇到仅更新密码的原因
问题2:每次状态更新都会触发重新渲染.当您一次只能更新一次(只有一次重新渲染)时,您将更新一次状态(即使它做错了,但这是事实).
解决这两个问题的解决方案是:
const newValues = {...values};
if (values.email.length <= 0) {
newValues.emailError: true;
newValues.emailErrorMessage: "Email field must not be empty";
};
if (values.password.length <= 0) {
newValues.passwordError: true;
newValues.passwordErrorMessage: "Password field must not be empty";
}
setValues(newValues);
内容总结
以上是互联网集市为您收集整理的javascript-React钩子setState不会立即更新全部内容,希望文章能够帮你解决javascript-React钩子setState不会立即更新所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。