【问题标题】:useNavigate - Invalid hook call. Hooks can only be called inside of the body of a function componentuseNavigate - 无效的挂钩调用。 Hooks 只能在函数组件的主体内部调用
【发布时间】:2022-01-25 19:58:58
【问题描述】:

我在前端使用 ReactJS,在后端使用 NodeJS,我正在尝试使用导航功能进行重定向,但出现错误。我该怎么做?我在哪里失踪?注册表单成功后如何重定向?

我的行动:

export const signup = (formData,navigation) => async (dispatch) => {
    try {
        const { data } = await API.signUp(formData)
        dispatch({type:AUTH,payload:data})
        let navigate = useNavigate();
        navigate("/");
    } catch (error) {
        dispatch({type:SIGNUP_FAIL,payload:
        error.response && error.response.data.message ? error.response.data.message : error.message
    })
    }
}

我的组件:

const signUpForm = (e) => {
    e.preventDefault()
    if(!login){
        dispatch(signup(form,navigation))
    }
}

【问题讨论】:

  • 是 useNavigate 自定义钩子吗?
  • useNavigate 将是在组件中导航的语法。在组件外部导航会有不同的语法。查看文档以了解您正在使用的任何导航器。

标签: node.js reactjs


【解决方案1】:

你需要把钩子移到函数外:

const signUpForm = (e) => {
    let navigate = useNavigate();
    e.preventDefault()
    if(!login){
        dispatch(signup(form,navigation,navigate))
    }
}

和:

export const signup = (formData,navigation,navigate) => async (dispatch) => {
    try {
        const { data } = await API.signUp(formData)
        dispatch({type:AUTH,payload:data})
        navigate("/");
    } catch (error) {
        dispatch({type:SIGNUP_FAIL,payload:
        error.response && error.response.data.message ? error.response.data.message : error.message
    })
    }
}

【讨论】:

  • 仍然出现同样的错误
  • 又在什么地方叫signUpForm?
  • <Form className='align-content-center mt-3' onSubmit={signUpForm}> ... </Form> 。在同一个组件中
  • 重点是 onSubmit 是一个函数,不能在里面使用钩子。使用组件中的钩子,然后将其传递给函数
  • 你说的我太初学者了。我不太明白如何使用
猜你喜欢
  • 2019-11-01
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 2021-12-18
  • 2020-07-22
  • 2020-02-24
  • 1970-01-01
相关资源
最近更新 更多