Reactjs 使用useState钩子更新状态时出现问题
我正在使用UseState管理我的表单错误:Reactjs 使用useState钩子更新状态时出现问题,reactjs,react-hooks,use-state,Reactjs,React Hooks,Use State,我正在使用UseState管理我的表单错误: const [formErrorObj, updateForErrormObj] = useState({ name_error: '', email_error: '', contact_number_error: '', username_error: '', password_error: '', promo_mail_error: '' }
const [formErrorObj, updateForErrormObj] = useState({
name_error: '',
email_error: '',
contact_number_error: '',
username_error: '',
password_error: '',
promo_mail_error: ''
})
function onSubmitHandler(event) {
event.preventDefault();
const error = validate();
if (error) {
const errorList = error.error.details;
const newErrorObj = {};
for (let err in errorList) {
newErrorObj[error.error.details[err].context.key + '_error'] = error.error.details[err].message
}
updateForErrormObj({ ...formErrorObj, ...newErrorObj })
console.log(newErrorObj, formErrorObj)
}
}
这就是我创建对象的地方,其中包含所有表单错误:
const [formErrorObj, updateForErrormObj] = useState({
name_error: '',
email_error: '',
contact_number_error: '',
username_error: '',
password_error: '',
promo_mail_error: ''
})
function onSubmitHandler(event) {
event.preventDefault();
const error = validate();
if (error) {
const errorList = error.error.details;
const newErrorObj = {};
for (let err in errorList) {
newErrorObj[error.error.details[err].context.key + '_error'] = error.error.details[err].message
}
updateForErrormObj({ ...formErrorObj, ...newErrorObj })
console.log(newErrorObj, formErrorObj)
}
}
新创建的对象如下所示:
contact_number_error: ""Contact Number" is not allowed to be empty"
email_error: ""Email" must be a valid email"
name_error: ""Username" is not allowed to be empty"
password_error: ""Password" length must be at least 5 characters long"
username_error: ""Username" is not allowed to be empty"
__proto__: Object
验证后,当我尝试使用以下工具更新状态时:
updateForErrormObj({ newErrorObj }) // try 1
updateForErrormObj(newErrorObj) // try 2
updateForErrormObj({ ...formErrorObj, ...newErrorObj }) // try 3
从我的三个作品中不尝试。
我不确定我在这里做错了什么。如果你的意思是它不会更新,因为你需要console.log它。这就是它的工作方式,它是异步的。您可以通过
useffect
中的console.log来检查它,这样您就可以看到它确实在更新。您说它不工作是什么意思?状态保持与初始状态相同?@wentjun是的,与初始状态相同您要在哪里更新此状态?它是useffect
还是回调函数?另外,您是如何确认它没有被更新的?这个状态是如何更新的?介意发布相关代码吗?@ParitoshMahale没有回答这个问题,如果您只是想查看更新的状态,您可以使用formErrorObj
作为依赖项登录useffect
,也可以在渲染(更嘈杂)中登录