首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过React-router-4删除所有浏览器历史记录

如何通过React-router-4删除所有浏览器历史记录
EN

Stack Overflow用户
提问于 2017-08-23 14:44:55
回答 3查看 22.6K关注 0票数 9

我在SPA中使用react-router。在我的例子中,浏览器历史记录是/home => /somepage1 => /another => /changepassword

当我在路由/changepassword中做一些事情时,我想转到/login路由,并清除所有以前的浏览器历史记录,并将此路由/login设置为历史上的第一个。

我如何才能做到这一点?

EN

回答 3

Stack Overflow用户

发布于 2019-01-17 01:12:49

TLDR…在某些情况下是可以做到的。

创建浏览器历史记录时的解决方案

我的应用程序是在一个新的浏览器窗口中加载的,因此我确信该应用程序将具有干净的浏览器历史记录,因此我可以使用此命令返回到浏览器历史记录中的第一页:

代码语言:javascript
复制
props.history.go(-(props.history.length - 1))

如果您想要在浏览器历史记录中返回的页面不在1位置,则可以在此开始页面记录history.length的值,然后在准备返回到开始页面时将该数字传递给此函数。

代码语言:javascript
复制
// loading start page…
const startPageIndex = props.history.length - 1

// later when ready to go back to start page…
props.history.go(-startPageIndex)

注意:使用上述任一解决方案返回时,“前进”历史记录将一直存在,直到用户向前导航以创建新的历史记录为止。

MemoryRouter -不存储浏览器历史记录

对于您想要替换历史…的页面流,使用“将您的URL的历史记录保存在内存中(不读写地址栏)”的因为它不会创建浏览器历史记录。

进一步阅读

Michael Jackson,react-router的作者,发布了关于Reset/clear historythis answer

我们没有办法以编程方式重置历史堆栈(至少在浏览器中,在内存历史中这将是微不足道的)。如果您出于某种原因需要清除历史堆栈,我建议您使用window.location.reload()

进一步的from MDN

无法清除会话历史记录或禁用非特权代码的后退/前进导航。最接近的可用解决方案是location.replace()方法,它用提供的URL替换会话历史记录的当前项。

票数 8
EN

Stack Overflow用户

发布于 2017-09-28 01:50:19

我不相信这有优雅的支持。但是,历史记录是可变的,因此您始终可以手动编辑历史记录。下面是你如何做到这一点的一个例子:

代码语言:javascript
复制
const history = this.props.history.entries

// set first entry in history to mirror the last entry
history[0] = history[history.length - 1]

// remove all but first history entry
history.length = 1
票数 0
EN

Stack Overflow用户

发布于 2018-03-08 13:38:13

删除所有历史记录条目

代码语言:javascript
复制
this.props.history.index=0

componentWillMount函数中的第一个条目中使用此选项

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45832431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档