javascript - 注销后 React Router 4 管理路由

标签 javascript reactjs meteor react-router react-router-v4

我是 React 新手,我一直致力于使用 Meteor 实现基本身份验证过程,我正在使用 React Router V4 进行路由,下面是我的路由代码以获得基本概念:

const routes = (
  <Router history={history}>
    <Switch>
        <Route exact path="/" component={Login}  onEnter={onEnterPublicPage}/>
        <Route exact path='/signup' component={Signup} onEnter={onEnterPublicPage}/>
        <Route exact path='/links' component={Link}/>
          <Route exact path='*' component={NotFound}/>
    </Switch>
   </Router>
);  

这是我期望的基本身份验证流程:

Login Screen > Home Screen(press logout) > Login Screen

此流程是通过使用以下代码实现的:

Tracker.autorun(() => {
 const isAuthenticated= !!Meteor.userId();
 console.log('isAuthenticated', isAuthenticated);
   if (isAuthenticated && isUnAuthenticatedPage){
     history.push('/links');
   }
   else if (!isAuthenticated && isAuthenticatedPage){
     history.push('/');
   }
});

注销后通过此代码,当我登陆到 Root(即登录屏幕)时,通过按浏览器的后退按钮,我再次被重定向到主屏幕,这根据预期流程不应该发生。我该如何处理这种情况?

我试图在注销后清除浏览器历史记录,但我认为这不是实现此流程的最佳做法。任何帮助,将不胜感激。谢谢。

最佳答案

使用history.replace()代替history.push()

为什么?

当你调用 history.push 接口(interface)时,它会添加一个新的状态在历史栈的顶部(所以你可以通过点击浏览器的后退按钮回到以前的历史状态),而 history.replace将用您定义的新历史状态替换当前历史状态

关于javascript - 注销后 React Router 4 管理路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50833807/

相关文章:

javascript - 使用媒体查询调整图像大小

javascript - html脚本,如何设置重定向到另一个网页之前的时间间隔

html - 在按钮的一侧显示图像裁剪通知

javascript - Meteor:账户密码

javascript - meteor - 铁路由器不等待 onBeforeAction Hook 中的订阅数据

javascript - Meteor:在服务器上将电子邮件地址转换为MD5hash,并在客户端上访问

javascript - 如何捕获仅临时添加到浏览器的动态代码?

javascript - 如何在不使用 Grid.Select() 的情况下获取 Kendo Grid 中一行的 UID

node.js - 禁用未找到 eslint 规则的警告消息

javascript - 无法使用fetch和reactjs获取列表上的数据