首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >reactjs浏览器回退按钮上的反向状态

reactjs浏览器回退按钮上的反向状态
EN

Stack Overflow用户
提问于 2018-05-20 15:24:01
回答 1查看 4.8K关注 0票数 4

为了获得一致的用户体验,我希望我的react应用程序在用户单击“浏览器后退”按钮时逆转其状态。

例如,如果我用函数调用更改状态中的元素:

代码语言:javascript
复制
  changeVar = (idx) => (event) => {
    this.setState({thisIndex: idx});
    //how to notify browser stack of this change?
  }

如何将其添加到浏览器堆栈中,以便用户可以单击浏览器中的“后退”按钮来逆转状态更改?

EN

回答 1

Stack Overflow用户

发布于 2018-05-20 20:40:50

因此,通常的问题是“如何处理单击的浏览器回/下一个按钮?”或者“我如何应对用户浏览历史?”

在这里,像历史API和它的.pushState这样的东西就出现了。

简言之:

  1. 在每一次重要的状态更改上,您称之为history.pushState(stateData)
  2. 一旦用户单击“后退”按钮,它实际上不会导航到不同的URL,而只是更改当前状态(但只有当堆栈中的先前状态是用.pushState.replaceState创建的情况下)。
  3. 您的代码通过侦听波波状态事件来检测是否发生历史导航(单击后退按钮)。
  4. 根据从history.state读取的适当状态数据,可以适当地还原应用程序状态。

到目前为止,最后一个问题是如何将应用程序中的所有数据放在单个对象中,并在以后恢复所有应用程序的模块状态。现在,redux来帮忙了。Redux假设您在所有应用程序上只有一个Store。换句话说,所有的状态都已经包含在单个对象中,您只需将其传递到.pushState()来存储,并在单击Back按钮后恢复它。

还记得我说过有重大变化吗?由于“整个应用程序中的所有数据”都足够大,它将造成开销,将其存储在内存中数百万次。另外,如果单击“后退”按钮,比如折叠一个下拉列表,那将是一个愚蠢的选择。

由于history是全局的,因此无法以每个组件的方式存储/恢复状态。因此,也许(只是可能)最好为您的组件实现“状态更改历史记录”,并建议用户一些不同的控件来恢复其状态(而不是单击浏览器中的后退按钮)。

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

https://stackoverflow.com/questions/50436367

复制
相关文章

相似问题

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