使用react-routerlogin后自动redirect

我想在我的react / react-router / flux应用程序中构build一个Facebooklogin。 我有一个在login事件中注册的监听器,并且想要将用户redirect到“/仪表板”,如果他们已经login。我该怎么做? Location.push不能很好地工作,除非完全重新加载页面。

React Router v0.13

Router.create返回的Router实例可以传递(或者,如果在React组件内,则可以从上下文对象获取 ),并且包含可用于转换到新路由的transitionTo 等方法。

反应路由器v3

这就是我所做的

 var Router = require('react-router'); Router.browserHistory.push('/somepath'); 

反应路由器v4

现在我们可以使用React Router v4中的<Redirect>组件。

渲染一个<Redirect>将导航到一个新的位置。 新位置将覆盖历史堆栈中的当前位置,例如服务器端redirect。

 import React, { Component } from 'react'; import { Redirect } from 'react-router'; export default class LoginComponent extends Component { render(){ if(this.state.isLoggedIn === true){ return (<Redirect to="/your/redirect/page" />); }else{ return (<div>Login Please</div>); } } } 

文档https://reacttraining.com/react-router/web/api/Redirect

反应路由器V2

即使这个问题已经得到解答,但我认为这个解决scheme对我来说很有帮助,因为这里没有提供任何解决scheme。

首先,我在我的LoginForm组件上使用路由器上下文

 LoginForm.contextTypes = { router: React.PropTypes.object }; 

之后,我可以访问我的LoginForm组件中的router对象

 handleLogin() { this.context.router.push('/anotherroute'); } 

PS:在React-router版本2.6.0上工作

反应路由器v3

在组件外部导航

像这样用Router创build你的应用程序

 // Your main file that renders a <Router>: import { Router, browserHistory } from 'react-router' import routes from './app/routes' render( <Router history={browserHistory} routes={routes} />, mountNode ) 

像Redux中间件或Flux操作:

 import { browserHistory } from 'react-router' // Go to /some/path. browserHistory.push('/some/path') // Go back to previous location. browserHistory.goBack() 

反应路由器/树/ V3 /文档

反应路由器v3

在组件内导航

当需要在组件内部redirect时,您应该使用withRouter装饰器。 装饰者使用上下文而不是你。

 import {withRouter} from 'react-router' fucntion Foo(props) { props.router.push('/users/16'); } export default withRouter(Foo); 

withRouter(Component,[options])

一个HoC(高阶组件)包装另一个组件,用路由器道具增强其道具。

withRouterProps = {… componentProps,router,params,location,routes}

传入你的组件,它将返回被包装的组件。

您可以明确指定路由器作为包装组件的道具,以从上下文覆盖路由器对象。

在你的商店:

 data.router.transitionTo('user'); 

和路由器有:

"Route name="user" handler={User}"

用户是路由处理程序