使用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>); } } }
反应路由器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}"
用户是路由处理程序