V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LiuJiang
V2EX  ›  程序员

有大佬使用过 Mobx 吗?

  •  
  •   LiuJiang · 2020-04-17 15:58:36 +08:00 · 1574 次点击
    这是一个创建于 1477 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需求是针对被观察的变量和普通变量,实现自动监听,只要该变量发生值的变化,自动存储到缓存,目前是这样实现的,但是拿不到需要的数据,控制台打印出来的数据和实际拿到的数据不一致,苦于没有实现思路,所以想请教下大佬如何实现一个自动持久化存储的 storage.js ?

    Mobx Version:5.13.1

    storage.sync.observable = action(function (object, attr, key) {
    console.warn('`storage.sync.observable` is deprecated, use `storage.sync` instead');
    const value = storage.getItem(key);

    console.log(111, object, attr, key);

    if (!(Object.prototype.toString.call(value) == '[object Null]' || Object.prototype.toString.call(value) == '[object Undefined]')) object[attr] = value;

    autorun(() => {
    console.log(222, object, attr, key);
    storage.setItem(key, object[attr])
    });
    });
    4 条回复    2020-04-17 18:19:40 +08:00
    Yumwey
        1
    Yumwey  
       2020-04-17 16:07:38 +08:00
    一年没用都到 5 了, 你可以用 compute 啊,而且 也有 reaction,observe 等,autorun 要值派生了吧。 大概记忆,你可以看看文档。
    beilo
        2
    beilo  
       2020-04-17 16:33:06 +08:00
    如果想自动保存 observable 数据的话我是这么做的
    ```
    import { observable, action, autorun, toJS, set } from "mobx";

    function autoSave(store, save) {
    let firstRun = true;
    autorun(() => {
    // 此代码将在每次运行任何可观察属性时运行
    // 对 store 进行更新。
    const json = JSON.stringify(toJS(store));
    if (!firstRun) {
    save(json);
    }
    firstRun = false;
    });
    }
    class RouteState {
    @observable state = {};
    constructor() {
    this.load();
    autoSave(this, this.save.bind(this));
    }
    load() {
    const storeTemp = sessionStorage.getItem("route_state");
    if (storeTemp) {
    const data = JSON.parse(storeTemp);
    set(this, data);
    }
    }
    save(json) {
    sessionStorage.setItem("route_state", json);
    }
    @action.bound
    actionState(_state) {
    this.state = _state;
    }
    }

    ```
    [可以参考下这个博客]( https://www.cnblogs.com/beilo/p/10996385.html)
    [参考链接 1]( https://stackoverflow.com/questions/40292677/how-to-save-mobx-state-in-sessionstorage)
    beilo
        3
    beilo  
       2020-04-17 16:33:50 +08:00
    ...话说我怎么用 md 语法
    LiuJiang
        4
    LiuJiang  
    OP
       2020-04-17 18:19:40 +08:00
    @beilo 这种方法有个弊端,没法灵活配置,我上面这种方法可以适应灵活针对某个变量进行存储。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2245 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 81ms · UTC 03:32 · PVG 11:32 · LAX 20:32 · JFK 23:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.