使用 useState 钩子更新状态的问题
problem in updating state using useState hook
我正在使用 useSatate 来管理我的表单错误:
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 它。它就是这样工作的,它是异步的。您可以在 useEffect
中通过 console.log 检查它,因此您可以看到它确实更新了。
我正在使用 useSatate 来管理我的表单错误:
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 它。它就是这样工作的,它是异步的。您可以在 useEffect
中通过 console.log 检查它,因此您可以看到它确实更新了。