我尝试在函数中做一个简单的重定向...
我试过这个:
Router.browserHistory.push('/dashboard');
但是后来我收到了这个错误:
Uncaught TypeError: Cannot read property 'push' of undefined
我的失败是什么?
我尝试在函数中做一个简单的重定向...
我试过这个:
Router.browserHistory.push('/dashboard');
但是后来我收到了这个错误:
Uncaught TypeError: Cannot read property 'push' of undefined
我的失败是什么?
创建一个新的browserHistory
将不起作用,因为<BrowserRouter>
创建了它自己的历史实例,并监听了它的变化。因此,不同的实例将更改 url 但不会更新<BrowserRouter>.
browserHistory
无法react-router-dom
从 中形成包v4
,并与history
包分开。
使用 WithRouter 导航
你可以比较使用的withRouter
高阶组件和navigate
用history
props
来自官方文档
您可以<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 中嵌套和动态路由的更多信息
正如评论中提到的,您应该使用这种新方法,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
}
这应该可以解决问题