проблема с обновлением состояния с помощью хука useState

Я использую 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

ни одной попытки из трех работ от меня. Я не уверен, что я здесь делаю не так.


person Paritosh Mahale    schedule 09.05.2020    source источник
comment
Что вы имеете в виду под этим? Состояние остается таким же, как исходное состояние?   -  person wentjun    schedule 09.05.2020
comment
@wentjun да, такое же, как в исходном состоянии   -  person Paritosh Mahale    schedule 09.05.2020
comment
Где вы пытаетесь это обновить? Это useEffect или функция обратного вызова? Кроме того, как вы подтвердили, что он не обновляется   -  person Agney    schedule 09.05.2020
comment
А как обновляется это состояние? Не возражаете опубликовать соответствующий код?   -  person wentjun    schedule 09.05.2020
comment
@Agney Я не использую useEffect Пожалуйста, проверьте обновленный вопрос, чтобы проверить шаги. console.log(newErrorObj, formErrorObj) эта строка подтверждает, что состояние не обновляется   -  person Paritosh Mahale    schedule 09.05.2020
comment
@wentjun, пожалуйста, проверьте обновленный код   -  person Paritosh Mahale    schedule 09.05.2020
comment
состояние настройки - это асинхронный процесс , вы не можете войти прямо под ним, чтобы увидеть обновленное состояние.   -  person Agney    schedule 09.05.2020
comment
У @Agney возникла проблема, как я могу использовать обратный вызов с обновлением useState?   -  person Paritosh Mahale    schedule 09.05.2020
comment
@ParitoshMahale Не понял вопроса, если вы просто хотите увидеть обновленное состояние, вы можете либо войти в useEffect с formErrorObj в качестве зависимости, либо в рендере (более шумно)   -  person Agney    schedule 09.05.2020


Ответы (1)


Если вы имеете в виду, что он не обновляется, потому что вы его console.log. Так работает, это асинхронно. Вы можете проверить это в console.log в useEffect, чтобы увидеть, что он действительно обновляется.

person Slavian    schedule 09.05.2020