我可以手动触发MobX中特定属性的观察者吗?

时间:2016-07-07 21:19:36

标签: javascript mobx

我有一个对象,它有一些可以保存在cookie中的可观察属性:

class MyClass {
  @observable attribute = Cookies.get("attribute");

  @action updateAttribute(newValue) {
    this.attribute = newValue;
    Cookies.set("attribute", newValue);
  }
}

var obj = new MyClass();

这显然不太理想,因为现在我将数据保存在两个地方(属性和cookie)。理想情况下,我很乐意做这样的事情:

class MyClass {
  @computed get attribute() {
    return Cookies.get("attribute");
  }

  @action updateAttribute(newValue) {
    Cookies.set("attribute", newValue);
    // Somehow mark the computed property `this.attribute` as dirty.
  }
}

这样的解决方案可能有效:

class MyClass {
  @observable _version = 0;

  @computed get attribute() {
    // Read `this._version` to create the dependency.
    this._version;
    return Cookies.get("attribute");
  }

  @action updateAttribute(newValue) {
    Cookies.set("attribute", newValue);
    this._version++;
  }
}

有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:2)

我认为你的解决方案实际上非常好。另一种解决方案是在启动时仅“读取”一次cookie,然后使用自动运行来存储cookie:

class MyClass {
  @observable attribute = Cookie.get("attribute")

  constructor() {
    autorun(() => Cookie.set("attribute", this.attribute))
  }
}