react-router中this.props.history为undefined?解决报错Cannot read property ‘push‘ of undefined

在使用this.props.history.push(’/xxx’)的时候遇到这个报错:
在这里插入图片描述

大概率原因:

只有用了Route组件,才会在子组件中注入route props(即 history, location, match)
详见官方文档route props


所以下面这个例子中,
Header 和 Footer组件中,this.props.history === undefined,
在ModuleA 和 ModuleB中,this.props.history就有值(因为有< Route > 包裹)

export default class App extends Component {
    render() {
        return (
            <Router>
                    <Header /> // Header这个组件的props中 没有 history
                    <Switch>
                        <Route exact path='/moduleA'><ModuleA/></Route> // ModuleA这个组件的props中 有 history
                        <Route exact path='/moduleB'><ModuleB/></Route>
                    </Switch>
                    <Footer />
                </div>
            </Router>
        );
    }
}

解决方法:

即, 如何在没有用Route包裹的组件中获取history?

react-router官网中提供了 withRouter
官网中写的明明白白:

You can get access to the history object’s properties and the closest 's match via the withRouter higher-order component.

具体用法如下,就可以在Header组件中用 this.props.history.push啦

import React from 'react';
import { withRouter } from 'react-router-dom';

class Header extends React.Component {
    // ...
}

export default withRouter(Header); // 重点在这里!!!

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值