使用 browserHistory.push 动态更改 Route 不适用于 react-router v4

IT技术 javascript reactjs
2021-05-10 12:30:13

我尝试在函数中做一个简单的重定向...

我试过这个:

Router.browserHistory.push('/dashboard');

但是后来我收到了这个错误:

Uncaught TypeError: Cannot read property 'push' of undefined

我的失败是什么?

2个回答

创建一个新的browserHistory将不起作用,因为<BrowserRouter>创建了它自己的历史实例,并监听了它的变化。因此,不同的实例将更改 url 但不会更新<BrowserRouter>.

browserHistory无法react-router-dom从 中形成v4,并与history分开

使用 WithRouter 导航

你可以比较使用的withRouter高阶组件和navigatehistoryprops

来自官方文档

您可以<Route>'s通过withRouter高阶组件访问历史对象的属性和最接近的匹配项withRouter每次路由更改时都会重新渲染其组件,并使用与<Route>渲染相同的propsprops: { match, location, history }.

示例片段

import {withRouter} from "react-router"; 

class MyComponent extends React.Component {
   ...
   changeRoute = () => {
        this.props.history.push('/dashboard)
   }
   ...
}


 export default withRouter(MyComponent);

另请参阅此答案以获取有关在 react-router-v4 中嵌套和动态路由的更多信息

React-router v4 中的嵌套路由和动态路由

正如评论中提到的,您应该使用这种新方法,v4 react router但如果您正在寻找快速解决方法,则可以使用上下文。```javascript

import { PropTypes } from 'prop-types'
import React from 'react'

export default class MyComponent extends React.Component {
    ...

    // redirect to dashboard
    redirectToDashboard = () => {
        this.context.router.history.push('/dashboard');
    }
}

MyComponent.contextTypes = {
    router: PropTypes.object
}

这应该可以解决问题