1

早上好

当我验证我的表单时,我有一个 handleSubmit 函数,一切正常,如果有任何错误,我的 api 会向我发送错误,并且注册已完成,只是,如果一切正常,则无法重定向...... History.replace 系统地创建一个错误我不明白,特别是因为我网站上所有的 .replace 都有效。

我的句柄提交功能:

    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 (in promise) TypeError: Cannot read property 'data' of undefined

我的 {history} 组件的参数恢复得很好......

如果有人有想法,非常感谢!

4

1 回答 1

1

这是因为您的错误对象没有响应属性,它将有一条消息,即 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);
            }
        }
于 2020-05-07T17:32:02.037 回答