Mobx 中可观察私有 属性
Observable private property in Mobx
我对 Mobx 商店中的可观察私有 属性 有疑问。问题是带有 getter 和 setter 的 observable private 属性 不起作用,而 public observable 属性 工作得很好。为什么会这样?我交替测试了 private 和 public 属性(#privateSelectedType
和 selectedType
)来做同样的事情。
EDIT2:我创建了一个代码框来更好地展示案例:https://codesandbox.io/s/tender-pond-kglzr?file=/src/carsStore.js
这里有一段代码可以说明这种情况。我用这家商店展示所有类型并标记 selectedType
:
class CarsStore {
#types = ["defaultType", "type1", "type2"];
#privateSelectedType = "defaultType";
selectedType = "defaultType";
otherThings = [];
get types() {
return this.#types;
}
get privateSelectedType() {
return this.#privateSelectedType;
}
set privateSelectedType(selectedType) {
this.#privateSelectedType = selectedType;
// call function updating otherThings, that's why I want to use setter in this store
this.#updateOtherThings();
}
#updateOtherThings = () => {
//update otherThings
}
}
decorate(CarsStore, {
"#types": observable,
"#privateSelectedType": observable,
selectedType: observable,
otherThings: observable
});
编辑:只需将所有出现的 #privateSelectedType
更改为 public 字段 _publicSelectedType
即可使此代码正常工作。在我看来,mobx 根本不起作用或与 JavaScript 私有字段不同。
编辑后的答案:
在评论中对您的代码进行一些研究和调试后,发现 mobx 在内部试图修饰 CarsStore 的原型属性,其中私有字段缺失:
原因是在这个提案语法中 私有字段只能从 class 的正文中可见和访问,因为它们被记录为元数据并且只能从引擎访问。更多信息在此 link(point 5)。我希望现在这能回答你的问题。
我对 Mobx 商店中的可观察私有 属性 有疑问。问题是带有 getter 和 setter 的 observable private 属性 不起作用,而 public observable 属性 工作得很好。为什么会这样?我交替测试了 private 和 public 属性(#privateSelectedType
和 selectedType
)来做同样的事情。
EDIT2:我创建了一个代码框来更好地展示案例:https://codesandbox.io/s/tender-pond-kglzr?file=/src/carsStore.js
这里有一段代码可以说明这种情况。我用这家商店展示所有类型并标记 selectedType
:
class CarsStore {
#types = ["defaultType", "type1", "type2"];
#privateSelectedType = "defaultType";
selectedType = "defaultType";
otherThings = [];
get types() {
return this.#types;
}
get privateSelectedType() {
return this.#privateSelectedType;
}
set privateSelectedType(selectedType) {
this.#privateSelectedType = selectedType;
// call function updating otherThings, that's why I want to use setter in this store
this.#updateOtherThings();
}
#updateOtherThings = () => {
//update otherThings
}
}
decorate(CarsStore, {
"#types": observable,
"#privateSelectedType": observable,
selectedType: observable,
otherThings: observable
});
编辑:只需将所有出现的 #privateSelectedType
更改为 public 字段 _publicSelectedType
即可使此代码正常工作。在我看来,mobx 根本不起作用或与 JavaScript 私有字段不同。
编辑后的答案:
在评论中对您的代码进行一些研究和调试后,发现 mobx 在内部试图修饰 CarsStore 的原型属性,其中私有字段缺失:
原因是在这个提案语法中 私有字段只能从 class 的正文中可见和访问,因为它们被记录为元数据并且只能从引擎访问。更多信息在此 link(point 5)。我希望现在这能回答你的问题。