ReactJS:使用浏览器按钮导航时保存状态
ReactJS: save state when navigate with browser button
我的应用程序有两个页面,第一个是主页,它是一个项目列表,用ajax加载,并支持分页。单击列表中的某个项目时,它将呈现一个新页面,显示该项目的详细信息。我正在使用react-router
,它运行良好。
然而,当我按下后退按钮时,我将返回主页,并且之前的所有状态都丢失了,我必须再次等待ajax加载,并且也丢失了分页。
那么,我该如何改进这一点,让页面像普通页面一样运行(当你按下后退按钮时,即使使用相同的滚动位置,你也可以立即返回到以前的状态),谢谢。
我自己通过提供一个模块Store
解决了这个问题,如下所示:
// Store.js
var o = {};
var Store = {
saveProductList: function(state) {
o['products'] = state;
},
getProductList: function() {
return o['products'];
}
};
module.exports = Store;
然后在主页组件中,加载并保存状态:
componentDidMount: function() {
var state = Store.getProductList();
if (state) {
this.setState(state);
} else {
// load data via ajax request
}
},
componentWillUnmount: function() {
Store.saveProductList(this.state);
}
这对我有用。
您应该使用动态路由,例如:
<Route name="inbox" handler={Inbox}>
<Route name="message" path=":messageId" handler={Message}/>
<DefaultRoute handler={InboxStats}/>
</Route>
如果更改messageId(子组件),则收件箱(父组件)组件中的状态仍然相同。
它看起来像这样:
<Route name="search" path="/search/:query?/:limit?/:offset?" handler={Search} />
相关文章:
- 单击顶部导航时如何进行向下滚动效果(向下滑动).
- angular 1.5应用程序中的导航栏
- 无法从jquery Mobile导航栏重定向到另一个页面
- 如何将getJson的响应保存在全局变量中
- 按下按钮时保存cookie
- 如何使用 Angular JS 将数据保存在数据库中
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 引导程序:在导航栏中,显示悬停在单个位置的基于Li Link的不同内容
- 导航到特定事件的另一个变量页面
- MVC 3页面导航和使用javascript传递参数
- HTML5在画布中加载较小的图像并保存实际大小的图像
- ReactJS:使用浏览器按钮导航时保存状态
- 使用自定义对话框提示用户尝试使用未保存的数据进行导航
- 阻止用户导航离开未保存的更改
- Google Chrome不支持在导航中保存Javascript
- 保存当前窗口URL,并在几次导航后移回该URL
- 使用JavaScript函数保存表单并在浏览器中向后导航
- 当从未保存更改的页面导航时警告用户
- AJAX onreadystatechange:导航离开并同时保存更改
- 多种形式&导航远离未保存的更改