React中编程式导航报:index.js:25 Uncaught TypeError: Cannot read properties of undefined (reading ‘push‘)

原因:router版本控制问题

如果是用yarn add react-router-dom命令安装的版本那应该是5.0以上的版本,这是我之前用的但是编程式导航一直报如上错误,后面我查阅了很久的资料换成了5.0的版本,解决了那个报错,核心原因就是history属性识别不到push方法,通过很多总方法最终我锁定了用withRouter解决问题

通过withRouter解决方案

1、安装5.0的版本:npm install react-router-dom@5.0.0
2、引入withRouter版本

import { BrowserRouter as Router, Route, Link } from 'react-router-dom';
import { withRouter } from 'react-router-dom';

3、通过withRouter将组件暴露出去

class Home extends React.Component{
    handleBack = () =>{
        // 使用编程式导航实现路由跳转
        this.props.history.push('/first')
    }
    render(){
        
        return(
            <div>
            <h2>我是后台首页</h2>
            <button onClick={this.handleBack}>返回登录页面</button>
        </div>
        )
    }
}
export default withRouter(Home);//重点解决问题关键

5.0版本和6.0版本的定义路由的写法

1、5.0版本写法

 <Route path="/first" component={导航的路由组件} />

2、6.0版本写法

<Routes><Route path="/first" element={<div>{导航的路由组件()}</div>} /></Routes>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
引用\[1\]:运行react项目时错"Uncaught TypeError: Cannot read properties of undefined (reading 'forEach')",引用\[2\]:在开发环境使用react-devtools时错"Uncaught TypeError: Cannot read property 'forEach' of undefined",引用\[3\]:经过排查发现这个问题可能是由于版本不匹配引起的。如果你使用的是React版本17.0.1,那么应该使用react-devtools的v4以上版本。你可以从这个地址下载v4插件:https://www.crx4chrome.com/crx/3068/,下载完后将插件的.crx后缀名改为.rar,然后解压该文件。解压后,你可以找到一个合适的插件版本来解决这个问题。 根据你提供的错误信息"react-refresh-runtime.development.js:315 Uncaught TypeError: Cannot read properties of undefined (reading 'map')",这个错误可能是由于在react-refresh-runtime.development.js文件的第315行尝试对一个未定义的对象进行map操作引起的。这可能是由于你的代码存在某个变量或属性未被正确定义或初始化导致的。你可以检查一下你的代码,确保所有的变量和属性都被正确定义和初始化。另外,你也可以尝试更新Reactreact-devtools的版本,以确保它们之间的兼容性。 总结一下,这个错误可能是由于版本不匹配或代码存在未定义的变量或属性引起的。你可以尝试更新Reactreact-devtools的版本,并检查你的代码是否存在未定义的变量或属性。希望这些信息对你有帮助。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [react 谷歌浏览器错:Uncaught TypeError: Cannot read properties of undefined (reading ‘forEach‘)](https://blog.csdn.net/u010234868/article/details/124380800)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [使用react-devtools后出现Uncaught TypeError: Cannot read property ‘forEach‘ of undefined的解决方法](https://blog.csdn.net/Leo_xian/article/details/112899961)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值