【发布时间】:2017-09-08 14:52:09
【问题描述】:
在 react 路由器 3 中,docs 包含一种在组件外部导航的方法。 React 路由器 4 似乎已经放弃了对此的支持,并且导航外部组件的唯一方法是在组件上 withRouter 并将历史记录转发到您需要的任何地方。
我个人认为这是不切实际的,并且会导致更多的纠缠和冗长的代码。因此,我的问题是:我是否错过了如何导航外部组件的替代方法?
【问题讨论】:
标签: react-router
在 react 路由器 3 中,docs 包含一种在组件外部导航的方法。 React 路由器 4 似乎已经放弃了对此的支持,并且导航外部组件的唯一方法是在组件上 withRouter 并将历史记录转发到您需要的任何地方。
我个人认为这是不切实际的,并且会导致更多的纠缠和冗长的代码。因此,我的问题是:我是否错过了如何导航外部组件的替代方法?
【问题讨论】:
标签: react-router
只需将应用程序包装在扩展的 BrowserRouter 中:
import { Router, Route, Switch, Redirect, BrowserRouter } from 'react-router-dom';
import { createBrowserHistory } from 'history';
export const history = createBrowserHistory();
export default class YourBrowserRouter extends BrowserRouter {
render() {
return (
<Router history={history}>
<Switch>
<Route exact path="/login" component={Login} />
</Switch>
</Router >
)
}
}
还有 import { history } ... history.push('/login') 在 react 组件之外需要它的地方。对我来说,如果服务器以 401 响应,我想从我的 fetch 实用程序方法中重定向到登录页面。
【讨论】:
history
如果您只想导航到新页面,推荐使用Redirect。如果您已经看到它并且由于某种原因它不起作用,那么不,您没有错过任何东西,withRouter 是您从路由外部访问历史记录的方式。
【讨论】: