如何在sessionStorage中保存Mobx状态

2024-05-02

试图从根本上实现这一点https://github.com/elgerlambert/redux-localstorage https://github.com/elgerlambert/redux-localstorage这是针对 Redux 的,但也适用于 Mobx。并且最好想使用sessionStorage。有没有一种简单的方法可以用最少的样板来实现这一点?


解决这个问题的最简单方法是每当任何可观察到的属性发生变化时都会触发 mobx“自动运行”。为此,您可以按照我对这个问题的回答 https://stackoverflow.com/a/39992005/688405.

我将在此处放置一些示例代码来帮助您入门:

function autoSave(store, save) {
  let firstRun = true;
  mobx.autorun(() => {
    // This code will run every time any observable property
    // on the store is updated.
    const json = JSON.stringify(mobx.toJS(store));
    if (!firstRun) {
      save(json);
    }
    firstRun = false;
  });
}

class MyStore {
  @mobx.observable prop1 = 999;
  @mobx.observable prop2 = [100, 200];

  constructor() {
    this.load();
    autoSave(this, this.save.bind(this));
  }

  load() {
    if (/* there is data in sessionStorage */) {
      const data = /* somehow get the data from sessionStorage or anywhere else */;
      mobx.extendObservable(this, data);
    }
  }

  save(json) {
    // Now you can do whatever you want with `json`.
    // e.g. save it to session storage.
    alert(json);
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在sessionStorage中保存Mobx状态 的相关文章

  • 如何使用 useQuery 挂钩来填充其他挂钩中的状态?

    我最近一直在处理一些与钩子相关的问题 因为我一直在我的一个项目中实现钩子 我不断收到错误 渲染的钩子数量比上一次渲染期间的钩子数量多 看来我能让代码正常工作的唯一方法是将 useQuery 挂钩放在所有其他挂钩之后 然而 这是一个问题 因为
  • 读取多个文件 cotent 的 React JS

    我正在尝试使用 React js 读取多个文件 但我的代码只读取一个文件 而不会读取其余文件 有什么建议吗 Thanks constructor props super props this state files changedFileI
  • 我可以将 OverlappingMarkerSpiderfier 与 react-google-maps 一起使用吗?

    我正在开发一个使用react google maps https github com tomchentw react google maps https github com tomchentw react google maps 图书馆
  • 如何在reactfire上启用持久性?

    我想使用以下方法在我的 PWA React 应用程序上实现 Firestore 离线持久性反应火 https github com FirebaseExtended reactfire图书馆 const firestore useFires
  • 获取自定义域以在 Github Pages 上使用 React

    我已遵循将自定义域定向到 Github 端和 DNS 端的 Github 项目页面的所有指南 该项目的 Github Pages 托管在自定义域之前可以正常工作 但现在要么不起作用 要么只是正常的 Github Pages 工作 但自定义域
  • 在 onClick 处理程序中传递参数的最有效方法

    我正在使用内联箭头函数来更改onClick我的 React 组件中一些 div 的处理程序 但我知道这在性能方面不是一个好方法 客观来说 什么是最有效的设置方式onClick需要参数的处理程序 这是我尝试过的 1 内嵌箭头函数 change
  • 如何使 TextInput 只接受最多 2 位小数且最大值?

    这是我在 React Native 中的 TextInput 组件的代码片段 模拟器上的渲染如下所示 我想让输入字段只接受十进制数onChangeText函数 我正在更新状态的值 我有什么想法可以实现这个输入绑定的最大值吗 我要检查里面的值
  • create-react-app 之后 React npm start 不起作用

    我正在学习 React 而且我的英语很差 我已经有两个反应项目 但它们也不起作用 我按照以下步骤操作 npx 创建反应应用程序我的应用程序 cd 我的应用程序 npm 启动 但它不起作用 我尝试清理缓存并再次安装 npm 但没有成功 我该如
  • 将本地图像路径作为两个功能组件之间的 prop 传递

    我正在使用 React Native 开发一个项目 在该项目中我很难理解 props 在功能组件之间的工作原理 我的要求是创建一个可重用的按钮组件 我可以在其中传递项目内资源文件中的图像位置 这样它就会为我创建按钮 由于某种原因 如果我手动
  • eslint/prettier 在 html 标签中添加不需要的空间

    我正在尝试向我的项目添加配置 以便代码自动格式化 我对 VS Code 中的用户设置进行了一些更新 还安装了 eslint 和 prettier 现在 每当我尝试保存我的代码时 都会从中得到改变 div div div div div di
  • react-hook-form:检查未保存的更改

    我有一个由以下人员控制的预填写表格react hook form https react hook form com const control handleSubmit formState setValue reset useForm
  • React Typescript:从文件输入获取文件

    我得到的错误是Property files does not exist on type ChangeEvent
  • React Map 总是使用最后一个元素的数据调用方法

    我正在制作一个社交媒体应用程序 我正在循环浏览所有评论并将其显示在用户界面上 当我单击编辑时 最后一条评论的文本总是显示在输入中 我尝试了很多不同的方法 改变了结构 使用bind来绑定上下文 但没有任何帮助 我正在使用 React Mate
  • 处理 Redux 和 React 中错误的最佳实践

    我的 redux 操作中有一个异步函数 它在我的减速器中返回一个像这样的对象 user fetching false fetched false error null 所以基本上当我开始调用异步函数时我将 redux 状态更新为fetchi
  • React 不响应按键事件

    我正在尝试实现一些非常基本的按键检测 但我根本无法让它工作 我有一个裸露的组件 应该在onKeyDown事件 但控制台中没有任何内容被注销 class App extends React Component constructor prop
  • React JS - 单击时更改颜色并将默认颜色放在所有其他颜色上

    我有 x 个渲染数文章预览依赖于 API 调用的组件 div div Object keys images map index i gt return div div
  • 渲染作为 Prop 传入的 Component

    我怎样才能渲染一个StyledComponent它是作为道具传入的吗 我正在传递一个Spinner组件到我的BarComponent作为渲染的道具 我尝试使用 this props icon in my BarComponent在下面的示例
  • 纱线安装错误:无法下载Chromium

    Yarn 安装无法下载 Chromium 错误如下 D workspace www ant design mobile pro yarn yarn install v1 12 3 Directory D workspace www ant
  • 在 React 应用程序的 shell 脚本中设置环境变量

    我正在尝试在 powershell 和 bash 脚本中设置一些环境变量 并在 ReactJS 应用程序中读取它们 shell脚本很简单 env AUTHDOMAIN some domain com env AUTHCLIENTID bun
  • 使用 next.js 进行服务器端渲染与传统 SSR

    我非常习惯 SSR 意味着页面得到完全刷新并从服务器接收完整 HTML 的方法 其中根据后端堆栈使用 razor pub other 进行渲染 因此 每次用户单击导航链接时 它只会向服务器发送请求 整个页面将刷新 接收新的 HTML 这就是

随机推荐