我尝试在函数中做一个简单的重定向...
我试过这个:
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用historyprops
来自官方文档
您可以<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
}
这应该可以解决问题