Реагировать - History.replace в try / catch создает ошибку - PullRequest
1 голос
/ 07 мая 2020

Доброе утро

У меня есть функция handleSubmit, когда я проверяю свою форму, все работает, мой api отправляет мне ошибки, если они есть, и регистрация выполнена, только невозможно перенаправить, если все работает. .. History.replace систематически выдает ошибку, которую я не понимаю, тем более что вся моя .replace везде на моем сайте работает.

Моя функция handleSubmit:

    const handleSubmit = async e => {
        e.preventDefault();
        const apiErrors = {};
        if(user.password !== user.passwordConfirm) {
            apiErrors.passwordConfirm = "mdpError"
            setErrors(apiErrors)
            return;
        }
        try {
            await usersApi.register(user)
            setErrors({})
            history.replace("/")
        } catch (error) {
            const { violations } = error.response.data;
            if (violations) {
                violations.forEach(violation => {
                    apiErrors[violation.propertyPath] = violation.message
                })
                setErrors(apiErrors);
            }
        }
    }

Консоль отображает эту ошибку: Uncaught (в обещании) TypeError: не удается прочитать данные свойства undefined

Я восстанавливаюсь красиво в параметрах моего компонента {history} ...

Если у кого-то есть идея, большое спасибо!

1 Ответ

1 голос
/ 07 мая 2020

Это связано с тем, что ваш объект ошибки не имеет атрибута ответа, он будет иметь сообщение, например error.message вместо error.response.

 try {
            await usersApi.register(user)
            setErrors({})
            history.replace("/")
        } catch (error) {
            // try printing your error here and check
            console.log(error) //-> check if it has response attribute??
            const { violations } = error.response.data;
            if (violations) {
                violations.forEach(violation => {
                    apiErrors[violation.propertyPath] = violation.message
                })
                setErrors(apiErrors);
            }
        }
...