【问题标题】:How to avoid redirecting twice (react-router-redux)?如何避免重定向两次(react-router-redux)?
【发布时间】:2018-01-05 22:44:50
【问题描述】:

我正在使用与 react-router 4.x 兼容的the next (5.0.0) version react-router-redux

我的应用有两个页面/login/home

如果用户访问不存在的页面,我正在尝试将页面重定向到 /login。这是我的代码

import { Route, Redirect } from 'react-router-dom';
import { ConnectedRouter, routerMiddleware, push } from 'react-router-redux';

ReactDOM.render(
  <Provider store={store}>
    <ConnectedRouter history={history}>
      <div>
        <Route path="/login" render={() => (
          isSignedIn ? <Redirect to="/home" /> : <Login />
        )}/>

        <Route path="/home" component={Home} />

        <Redirect to="/login" />
      </div>
    </ConnectedRouter>
  </Provider>,
  document.getElementById('root')
);

如果我删除&lt;Redirect to="/login" /&gt;,如果用户已经登录,当他打开页面/home时,应用程序会直接进入主页,这很好。

但是,使用&lt;Redirect to="/login" /&gt;,当用户打开页面/home时,应用程序将首先重定向到/login,然后返回到/home

如何避免这种重定向两次?谢谢

【问题讨论】:

  • 为什么不为 Home 配置路由,然后重定向到登录是用户没有从 Home 组件中登录
  • 嗨@ShubhamKhatri,我没听明白,你能解释一下吗?谢谢
  • 查看此问题以检查主页stackoverflow.com/questions/44127739/… 中的登录并重定向我的意思是您可以拥有类似&lt;Route path="/home" component={Home}/&gt; 的路线
  • 对不起,我的错,其实已经是这样了,我刚刚更新了。但还是不行。

标签: javascript reactjs react-router-redux react-router-dom


【解决方案1】:

利用Switch 来渲染第一个匹配的路由,而不是别的

import {Switch} from 'react-router';

ReactDOM.render(
  <Provider store={store}>
    <ConnectedRouter history={history}>
      <Switch>
        <Route path="/login" render={() => (
          isSignedIn ? <Redirect to="/home" /> : <Login />
        )}/>

        <Route path="/home" component={Home} />

        <Redirect to="/login" />
      </Switch>
    </ConnectedRouter>
  </Provider>,
  document.getElementById('root')
);

在您的情况下发生的情况是,即使 /home 匹配,Redirect 也会被执行。

【讨论】:

猜你喜欢
  • 2017-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-10
  • 2017-08-09
  • 2018-06-02
  • 1970-01-01
相关资源
最近更新 更多