Reactjs 如何添加重定向以动态响应路由器?
我有登录组件,未经验证的用户可以使用该组件。认证之后,该组件应立即不可用Reactjs 如何添加重定向以动态响应路由器?,reactjs,flux,react-router,Reactjs,Flux,React Router,我有登录组件,未经验证的用户可以使用该组件。认证之后,该组件应立即不可用 var routes = ( <Route handler={App}> <Route name="signIn" handler={signIn}/> {/* redirect, if user is already authenticated */} { localStorage.userToken ? (
var routes = (
<Route handler={App}>
<Route name="signIn" handler={signIn}/>
{/* redirect, if user is already authenticated */}
{ localStorage.userToken ? (
<Redirect from="signIn" to="/user"/>
) : null
}
</Route>
);
Router.run(routes, (Handler, state) => {
React.render(<Handler {...state}/>, document.getElementById('main'));
});
var路由=(
{/*重定向,如果用户已通过身份验证*/}
{localStorage.userToken(
):null
}
);
Router.run(路由,(处理程序,状态)=>{
React.render(,document.getElementById('main'));
});
如果用户在身份验证后出于任何原因重新加载了webapp,则此代码非常有效,但如果用户没有重新加载webapp,则此代码当然无效。
我曾尝试将this.context.router.transition直接用于注册组件,但效果很差-该组件被渲染,然后该脚本被执行
因此,我想将重定向添加到routes变量中,使路由器重定向,而无需尝试渲染组件。与其检查验证流并有条件地渲染特定路由,不如推荐另一种方法:
如果您使用的是react router 0.13.x,我建议您在需要检查身份验证时在组件上使用。当处理程序即将呈现时,将调用它,从而使您有机会中止或重定向转换(在本例中,检查用户是否经过身份验证,如果没有,则重定向到另一个路径)。请参见此处的验证流示例:
对于>0.13.x的版本,应该是和。请参见此处的验证流示例:
基本上,您将auth check流从routes
变量移到转换事件/挂钩中。在实际呈现路由处理程序之前,请检查身份验证,并将用户重定向到另一个路由。这篇博客文章详细讨论了onEnter
方法,并提供了另一种可能更简单的方法: