You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Next.js中使用react-router-dom实现登录成功后页面跳转报错

问题排查与解决

报错原因

你违反了React Hook的核心规则:Hook只能在React函数组件的顶层作用域,或者自定义Hook的顶层作用域调用,不能在事件处理函数、循环、条件判断内部调用。你的代码里在trigger这个事件处理函数中调用了useNavigate(),这就触发了报错。

修复代码

把useNavigate()的调用移到组件的顶层,也就是SignUp函数内部、trigger函数外面:

export default function SignUp() {
  // 将useNavigate移至组件顶层
  const navigate = useNavigate();

  const trigger = async (event: any) => {
    event.preventDefault();
    const data = new FormData(event.currentTarget);
    try {
      const response = await fetchRestEndpoint(`/users`, 'POST', {
        username: data.get("username"),
        email: data.get("email"),
        password: data.get("password"),
        role: "user"
      });
      if (response.ok) {
        const user: any = await response.json();
        console.log(user);
        navigate('/');
      }
    } catch(e) {
      alert(e);
    }
    // 剩余代码...
  }

  // 组件其他逻辑...
}

补充说明

React Hook的规则是为了保证组件每次渲染时Hook的调用顺序一致,避免出现状态混乱的问题。所有Hook调用都必须放在组件的最外层,不能嵌套在任何子函数、条件或循环里。

内容的提问来源于stack exchange,提问作者nik4298

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 07:42:09