Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 使用useState钩子更新状态时出现问题_Reactjs_React Hooks_Use State - Fatal编程技术网

Reactjs 使用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: '' }

我正在使用UseState管理我的表单错误:

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
,也可以在渲染(更嘈杂)中登录