react与mobx搭配时如何缓存mobx的数据(刷新之后保存状态)

  • 问题
  • 思路
  • 代码
  • 写在最后

问题

近日在使用react的过程中,在状态管理方面,我使用了mobx,但是发现它与vuex有一个一样的问题,在强制刷新之后会使我保存的状态丢失,于是我打算仿照我处理vuex的方法,写一个类似的功能,话不多说,进入正题。

思路

我打算这样处理:把状态缓存在session里。
步骤一:在页面一进入的时候判断session内是否有我缓存的状态,有,那么就把缓存中的数据赋值给我的状态,没有,就不做任何操作
步骤二:在页面刷新或者退出的时候,把数据缓存到session内,beforeunload事件。
下面直接上代码

代码

    @action getDataFromSessionStorage = () => {sessionStorage.getItem("testStore2Obj")?this.testStore2Obj = JSON.parse(sessionStorage.getItem("testStore2Obj")):"";};@action setDataFromSessionStorage = () => {sessionStorage.setItem("testStore2Obj",JSON.stringify(this.testStore2Obj));};

把如上两个方法加在你的store文件内
如图所示(注意“testStore2Obj”这个变量是我自定义的,详情请注意看图):

然后在你的App.js内加入这段代码(“testStore2”注意这个变量,这个变量是你的store的文件名)

    componentWillMount(){//获取mobx的数据this.props.testStore2.getDataFromSessionStorage();}componentDidMount() {//在页面刷新时将mobx里的信息保存到sessionStorage里window.addEventListener("beforeunload",()=>{this.props.testStore2.setDataFromSessionStorage();})}

然后就可以解决刷新之后状态丢失的问题啦~

写在最后

有同学可能会问为什么我的图中会是

 export default testStore2

而不是

 export default new testStore2()

这是因为我做了store的拆分,方便以后好维护。

好啦,就写到这里啦~希望这篇文档能给您带来帮助,感谢阅读。

react与mobx搭配时如何缓存mobx的数据(刷新之后保存状态)相关推荐

  1. 更新数据时redis缓存与数据库数据不一致的问题

    最初级的缓存不一致问题及解决方案 问题:先修改数据库,再删除缓存.如果删除缓存失败了,那么会导致数据库中是新数据,缓存中是旧数据,数据就出现了不一致. 解决思路:先删除缓存,再修改数据库.如果数据库修 ...

  2. 25 Redis的缓存中的数据和数据库中的不一致问题

    25 Redis的缓存中的数据和数据库中的不一致问题 前言 一.缓存和数据库的数据不一致是如何发生的? 二.解决Redis 和数据库数据不一致的方法 总结 前言 Redis 缓存经常会遇到有 4 个方 ...

  3. 翻译君Mobx,Ten minute introduction to MobX and React

    简要介绍:最近看了一下Mobx,然后有一篇入门教程是英文的,这里翻译一下并写写自己的心得体会. 原文地址:https://mobx.js.org/getting-started.html 一.Mobx ...

  4. 我在React Native中构建时获得的经验教训

    by Amanda Bullington 通过阿曼达·布林顿(Amanda Bullington) 我在React Native中构建时获得的经验教训 (Lessons I learned while ...

  5. [react] 在React中声明组件时组件名的第一个字母必须是大写吗?为什么?

    [react] 在React中声明组件时组件名的第一个字母必须是大写吗?为什么? 必须,React根据首字母是否大写来区分react组件还是dom元素 个人简介 我是歌谣,欢迎和大家一起交流前后端知识 ...

  6. Redis:缓存问题之数据不一致(更新数据库时 主动更新)

    Redis:缓存问题之数据不一致(更新数据库时 主动更新) 关键词 数据源不一样(缓存和db操作非原子性) 1.延时双删 -> 2.TTL -> 3.缓存删除失败记录到日志中,利用脚本提取 ...

  7. 场景切换时清理缓存!!CCTextureCache、CCSpriteFrameCache、CCAnimationCache

    cocos2d-x中存在3个缓存类,都是全局单例模式. 1.CCTextureCache 首先是最底层也最有效的纹理缓存CCTextureCache,这里缓存的是加载到内存中的纹理资源,也就是图片资源 ...

  8. Taro3.2 适配 React Native 之运行时架构详解

    导读 由 58 前端团队主导的 Taro 3 适配 React Native 工作已完成有一段时间了.目前发布了多个体验版,也将在3月底迎来正式版.基于 Taro 的良好架构演变,适配 React N ...

  9. Can not perform this action after onSaveInstanceState和重建Activity时恢复缓存的Fragmen的问题

    Fragment 在显示或者隐藏,移除是出现Can not perform this action after onSaveInstanceState  #解决办法:onSaveInstanceSta ...

最新文章

  1. html文本域应该写在哪,我们如何在pharo上填写html文本区域
  2. SAP WM中阶Storage Type的Capacity Check – Check based on palletization according to SUT 1
  3. 尘埃落定!苹果 10 亿美元入局 5G,Intel 挥别 9 年基带业务
  4. 利用python爬虫(part11)--XpathHelper为啥不能全信之JS要闹哪般
  5. 爱立信与中国联通成功完成国内首个LTE三载波聚合大规模部署测试
  6. 化繁为简:数据库运维人员应该知道这些...
  7. libevent源码深度剖析十二
  8. 从“在winform里打开网页功能”引发的问题探究
  9. Cocosd-x”设计模式“之五 :防御式编程”模式“
  10. linux php添加mysql扩展模块_linux下为php添加扩展库的方法
  11. angular.js双向数据绑定实现动画特效
  12. ESP32 WS2812B灯带 代码
  13. pycharm远程控制服务器(局域网 内网穿透)
  14. 小程序设置appId
  15. 转使用chrome命令行:disable-web-security 实现浏览器跨域
  16. SQL server:查询条件中判断某字段不为空
  17. 动态规划问题(凑硬币)理解总结
  18. css 横线中间添加文字
  19. jQ模拟逐帧动画动画
  20. Red Giant VFX Suite for Mac(红巨人特效合成插件)

热门文章

  1. 【Linux】Shell脚本中如何使用“循环”遍历“数组”中的元素(包括MySQL的常用指令介绍)
  2. windows可以ping通linux虚拟机的ip,但是ping不通主机名称解决方案
  3. Java习题练习:幸运数
  4. 小成开发日记-----利用Python在互动吧网站自动抢票实战分析
  5. 4K Stogram Mac版(Instagram照片下载工具)中文版
  6. c++入门中,一道题展开的东西……继承与派生,多态和重载
  7. C++ 中 fill() 的使用
  8. mysql数据库自动生成数据库开发设计文档
  9. 游戏安全与反外挂:加固工具介绍
  10. linux 入门命令,新手入门Linux命令集锦