Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何添加重定向以动态响应路由器?_Reactjs_Flux_React Router - Fatal编程技术网

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
方法,并提供了另一种可能更简单的方法: