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

React-router v5.3使用history.push跳转报错:Cannot read 'push' of undefined

解决React Router v5.3中history.push报错"cannot read properties of undefined (reading 'push')"

错误原因及修复步骤

1. 确保组件处于Router上下文范围内

useHistory钩子仅能在被React Router的Router组件(如BrowserRouter)包裹的组件中正常工作。如果你的Loginpage没有被Router包裹,useHistory()会返回undefined,调用history.push自然会触发报错。

修改入口文件(示例:App.js):

import React from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import Loginpage from './Loginpage';
import JobFindPage from './components/JobFindPage';
import CreateJobPage from './components/CreateJobPage';

function App() {
  return (
    <Router>
      <Switch>
        <Route exact path="/" component={Loginpage} />
        <Route path="/job-find" component={JobFindPage} />
        <Route path="/create-job" component={CreateJobPage} />
      </Switch>
    </Router>
  );
}

export default App;

2. 修正history.push的跳转路径

你代码中history.push('./components/JobFindPage')是错误用法——这里需要填写路由配置中定义的路径,而非文件系统的相对路径。按照上面的路由配置示例,修改Loginpage内的跳转逻辑:

修改Loginpage的handleFormSubmit函数:

const handleFormSubmit = (event) => {
    event.preventDefault();

    if (username === 'employee' && password === 'emp123'){
        history.push('/job-find'); // 替换为路由配置的路径
        alert('hii');
    }
    else  if (username === 'employer' && password === 'emr123'){
        history.push('/create-job'); // 替换为路由配置的路径
        alert('hii');
    }
    else{
        alert ('wrong username or password')
    }
}

3. 可选:验证React Router版本一致性

确保项目安装的是react-router-dom v5.3.x版本,避免版本不兼容问题:

npm list react-router-dom

若版本不符,重新安装指定版本:

npm install react-router-dom@5.3.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:42:26