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

ReactJS使用history.push跳转报错无法跳转至dashboard页面问题求助

问题修复方案

1. 修复history.push未定义报错

你出现该报错是因为未正确配置React路由,且没有在Login组件中获取合法的导航对象,按以下步骤操作:

  • 安装react-router-dom依赖:
npm install react-router-dom
  • 修改App.js配置路由规则:
import React from "react";
import "bootstrap/dist/css/bootstrap.min.css";
import { BrowserRouter, Routes, Route } from "react-router-dom";
import Login from "./components/Login";
import Dashboard from "./components/Dashboard"; // 导入你的Dashboard组件

function App() {
  return (
    <div className="App">
      <BrowserRouter>
        <Routes>
          <Route path="/" element={<Login />} />
          <Route path="/dashboard" element={<Dashboard />} />
        </Routes>
      </BrowserRouter>
    </div>
  );
}

export default App;
  • Login组件替换历史导航写法:
    react-router-dom v6版本已经废弃useHistoryAPI,改用useNavigate实现跳转,在Login组件顶部添加以下代码:
import { useNavigate } from 'react-router-dom';

// 组件内部声明导航实例
const navigate = useNavigate();

2. 修复请求成功同时弹出两个提示的问题

出现该问题的核心原因是你混用了async/await和.then/.catch写法,history.push执行时因为history是undefined会抛出异常,该异常会被后续的catch块捕获,导致先弹出成功提示后触发错误提示,同时你注释了catch块中的setLoading(false)会导致加载状态异常。
修正后的loginHandel函数代码如下:

const loginHandel = async () => {
  setLoading(true);
  try {
    const res = await axios.get(
      `http://116.202.231.219:8069/Restaurant/Login_Updated?Cont4=${encodeURIComponent(email)}&Pswd=${encodeURIComponent(password)}`
    );
    console.log(res);
    if (res.status === 200) {
      alert("It is working");
      setLoading(false);
      navigate("/dashboard");
    }
  } catch (err) {
    console.log(err);
    alert("User email and password mismatched!");
    setLoading(false);
  }
};

注意:示例中添加了encodeURIComponent处理请求参数,避免特殊字符导致请求异常,建议后续将登录请求改为POST方式加密传输密码,不要明文放在GET请求URL中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:15:01