Reactjs 如何删除React路由器中的上一个历史记录?

Reactjs 如何删除React路由器中的上一个历史记录?,reactjs,react-router,Reactjs,React Router,我在我的网站上有注销按钮,当点击时,他们的身份验证被删除,并被发送回主页 我在用 browserHistory.push({ pathname: '/home' }); 但我注意到,如果我在注销后点击“后退”按钮,他们会返回到上一个登录页面(他们不会看到任何内容,因为他们没有身份验证) 我想删除历史记录,这样他们就不能回去了 所以我试过了 browserHistory.replace({ pathname: '/home' }); 就我所知,这是不可能的 我建议您在需要对用户进行身份验证的页

我在我的网站上有注销按钮,当点击时,他们的身份验证被删除,并被发送回主页

我在用

browserHistory.push({ pathname: '/home' });
但我注意到,如果我在注销后点击“后退”按钮,他们会返回到上一个登录页面(他们不会看到任何内容,因为他们没有身份验证)

我想删除历史记录,这样他们就不能回去了

所以我试过了

browserHistory.replace({ pathname: '/home' });

就我所知,这是不可能的


我建议您在需要对用户进行身份验证的页面上检查用户身份验证,并使用
browserHistory.replace将其重定向到登录页面。因此,如果用户在注销后单击“返回”,将再次看到登录页面。

您好,很高兴看到您在应用程序中实现优化身份验证的过程。您需要确保正确维护历史堆栈。我想你一直在使用
历史。甚至往回推。这会制造麻烦的。尝试使用
goBack(),go(n)
进行编程,对于浏览器后退按钮,使用
replace,在需要的地方按下
。您的历史堆栈应该与浏览器的“后退”按钮对齐。

这就是我要做的吗?当用户单击我的注销时,我有browserHistory.replace({pathname:'/home'});使用
browserHistory.replace
时,它仅将当前位置替换为新位置。但所有以前的历史记录都保留了下来。我想说的是,您应该通过路由的
oneter
hook(对于React Router v3)或通过认证页面中的
componentDidMount
检查用户认证(对于React Router v4)如果用户未通过身份验证,则将当前位置替换为登录页面。我会签入componentDidMount,但问题是它只被触发一次。因此,如果用户登录->(现在在“成员”区域)->退出->登录页面并点击返回按钮返回到/members,则不会触发componentDidMount,因为它已经装载。感谢您的澄清。据我所知,在安装某种根组件期间,您在应用程序级别检查用户身份验证。您可以将
isLoggedIn
密钥添加到顶级状态,在成功登录后将其设置为true,在注销后将其设置为false,并在需要身份验证的页面的
componentDidMount
方法中检查它。或者创建一个HOC来执行此检查。根据您的身份验证方法、状态管理方法、react路由器版本等,应该选择多种方法。如果(!isLoggedIn()){return;}
感谢您的帖子,我确实使用了Push来实现很多功能,但大多数情况下,当自动登录失败时,这会返回到登录页面。因为我不能保证这是他们历史的最后一页。不过,我会回去看看是否有任何地方,我可能应该使用戈巴克