React-router:更改URL并清除历史记录

Thu*_*yen 21 reactjs react-router

我有以下场景:

用户打开激活链接; 用户完成激活过程后,系统会将它们移动到另一个页面.
我不想在浏览器的历史记录中保留激活链接,因为当用户返回时,他们将再次进入激活步骤.

如何替换浏览器的历史记录以从我的应用程序中删除某些请求?

Har*_*uja 11

在reactJS中你应该browserHistory用于此目的.这会照顾你的历史,你不需要自己实现这些功能.

browserHistory有2个方法push(),replace()它们的功能和@fazal在答案中提到的功能相同但更好.

因此,如果您想避免用户返回以前的状态,则需要使用 browserHistory().replace

首先将其导入您的代码: -

import {browserHistory} from 'react-router'
Run Code Online (Sandbox Code Playgroud)

用户激活后,您执行以下操作: -

browserHistory.replace(//your new link)
Run Code Online (Sandbox Code Playgroud)

  • 更新:从react-router v4开始,这不起作用.链接:https://github.com/ReactTraining/react-router/issues/4732 (2认同)

Faz*_*sel 6

HTML5 历史 API 提供了两种方法来Adding and modifying history entries.

pushState(): 后退状态保留 replaceState(): 无后退状态

假设您正在使用react-router. 所以,在你的 Component 上使用

this.props.history.replaceState('your new state')
Run Code Online (Sandbox Code Playgroud)

阅读更多:操纵浏览器历史记录

视频:REACT JS 教程 #6 - React 路由器和使用 React JS 的单页应用程序介绍

  • @Alfrex92 现在是 `props.history.replace` (2认同)

O.O*_*O.O 5

我知道这是旧的,但我有一个类似的问题,其他答案都不是 100% 适用于我的版本,或者React这应该通过清除附加路径在更新的版本中工作。

   
  //replace(path, state)
  this.props.history.replace("/home", "urlhistory");
Run Code Online (Sandbox Code Playgroud)

  • 什么是“url历史记录”?我在文档中没有看到任何地方提到过? (5认同)