MobX - 将所有商店可观察对象重置为初始状态?

新手上路,请多包涵

给定一个 MyQuestionStore 存储:

 class MyQuestionStore {
  @observable asked = 'today';
  @observable answered = false;
  @observable question = {
    upvotes: 0,
    body: null,
    asker: null,
    askerPoints: null,
    askerBadges: null
  }
  // some more initial state observables...
  // some actions below...
}

const myQuestionStore = new MyQuestionStore();
export default myQuestionStore;

将所有存储可观察值重置回其初始状态数据(’today’/false/0/null/etc..)的正确方法是什么?

注意: 例如 MyQuestionStore.reset() 类的东西,我认为这是一种很好的 MobX 方式,但我认为它不存在。我将不得不编写一个名为 reset 的动作,并手动将每个可观察对象重置回其初始状态。我认为这不是正确的方法,因为如果我添加更多 observables ,我每次都必须手动将它们添加到 reset 操作中。

原文由 Wonka 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 793
2 个回答

_编辑_:这是一个旧答案,在较新版本的 mobx 中不起作用。

如果您使用 reset() 来初始化对象,您可以避免代码重复。这就是我的意思:

 import { extendObservable } from "mobx";

class MyQuestionStore {
  constructor() {
    this.reset();
  }

  @action reset() {
    extendObservable(this, {
      asked: 'today',
      answered: false,
      question: {
        upvotes: 0,
        body: null,
        asker: null,
        askerPoints: null,
        askerBadges: null
      }
    });
  }
}

原文由 Mouad Debbar 发布,翻译遵循 CC BY-SA 4.0 许可协议

要重置商店,您可以执行以下操作:

 const initialValue = {
  name: 'John Doe',
  age: 19,
}

@action reset() {
  Object.keys(initialState).forEach(key => this[key] = initialState[key]);
}

您可以设置初始存储值:

 class myStore {
  constructor() {
    extendObservable(this, initialState);
  }
}

原文由 Sava Vidakovic 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题