10

与えられた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;

すべてのストアオブザーバブルを初期状態データ (「今日」/false/0/null/etc..) にリセットする正しい方法は何でしょうか?

注:たとえば、 MobXMyQuestionStore.reset()の良い方法だと思いますが、存在しないと思います。呼び出されるアクションを作成し、reset各オブザーバブルを手動でリセットして初期状態に戻す必要があります。を追加すると、毎回アクションobservablesに手動で追加する必要があるため、それは正しい方法ではないと思います。reset

4

5 に答える 5

4

リセット関数でデフォルトのオブザーバブルを繰り返さなければならなくなったので、次のようになります。

class MyQuestionStore {
  @observable asked = 'today';
  @observable answered = false;
  @observable question = {
    upvotes: 0,
    body: null,
    asker: null,
    askerPoints: null,
    askerBadges: null
  }

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

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

私はまだそれを繰り返してDRYに保つよりも良い方法があると感じています. より良い DRY 回答があることを期待して、今のところ質問を開いたままにします。

于 2016-09-04T16:56:38.407 に答える
4

深くリセットする必要がない場合は、httpscreateViewModel ://github.com/mobxjs/mobx-utils/#createviewmodel のユーティリティがmobx-utils役立つかもしれません。

于 2016-09-06T18:01:20.707 に答える