首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在页面重新加载时清除react-router中的location.state?

如何在页面重新加载时清除react-router中的location.state?
EN

Stack Overflow用户
提问于 2016-10-18 12:18:13
回答 6查看 30.6K关注 0票数 32

我目前正在传递路由更改的状态,如下所示:

代码语言:js
复制
View Details

我的逻辑是,如果"location.state.transaction“存在,则不获取新数据,否则,获取数据。

现在的缺陷是当页面重新加载时。如果用户重新加载页面,应用程序需要获取新数据。我以为如果重新加载,"location.state“就会被清除,但很明显,这个状态是保存在sessionStorage中的。

我该如何解决这个问题呢?我可以每次都获取新数据,但它不应该在单击“View Details”链接时获取数据。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-07-12 03:01:01

我也遇到了这个问题,我最终做的是从react路由器检索浏览器历史记录并清除特定的location.state属性。所以在你的情况下,它将是transaction。我是在

componentDidMount因此,在您第一次访问该页面后,该属性将不再存在,

代码语言:javascript
运行
复制
import createHistory from 'history/createBrowserHistory'

...

componentDidMount(){
    const history = createHistory();
    if (history.location.state && history.location.state.transaction) {
        let state = { ...history.location.state };
        delete state.transaction;
        history.replace({ ...history.location, state });
    }
}
票数 21
EN

Stack Overflow用户

发布于 2019-06-02 20:31:18

有一种更好的方法,不用使用三方库。

我们可以使用history.replace()

https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/api/history.md

代码语言:javascript
运行
复制
componentDidMount(){
 const {location,history} = this.props;
 //use the state via location.state
 //and replace the state via
 history.replace() 
}
票数 19
EN

Stack Overflow用户

发布于 2021-02-25 06:41:03

如果你正在使用react钩子,你可以使用window.history

直接清除状态,而不触发重现。这比使用useHistory胡克的

replace方法,这将导致组件重新呈现。

代码语言:js
复制
window.history.replaceState({}, document.title)
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40099431

复制
相关文章

相似问题

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