Javascript 为什么MobX允许我在没有@action的情况下更改此属性?
为什么严格模式下的MobX允许我更改从构造函数调用的toggle方法的标志?它不应该告诉我“mobx处于严格模式,您应该使用动作”吗 代码如下Javascript 为什么MobX允许我在没有@action的情况下更改此属性?,javascript,mobx,Javascript,Mobx,为什么严格模式下的MobX允许我更改从构造函数调用的toggle方法的标志?它不应该告诉我“mobx处于严格模式,您应该使用动作”吗 代码如下 import { useStrict, configure, autorun } from 'mobx'; import { observable, action, computed } from 'mobx'; configure({ enforceActions: true }); class Test { @observable f
import { useStrict, configure, autorun } from 'mobx';
import { observable, action, computed } from 'mobx';
configure({ enforceActions: true });
class Test {
@observable flag = false;
constructor() {
this.toggle();
}
toggle() {
this.flag = !this.flag;
}
}
var t = new Test();
autorun(function test () {
console.log("fired: " + t.flag); //prints fired: true
});
多亏了@ChrisEdgington,属性只有在调用构造函数之后才变成可观察的,这也是合乎逻辑的,因为在调用构造函数之前对象是不存在的 您基本上只是两次初始化
标志
字段,我建议您不要这样做
class Test {
@observable flag = true;
}
// is the same as:
class Test {
@observable flag;
constructor() {
this.flag = true;
}
}
因此,只需使用一种方式,而不是两种方式。您使用的是什么版本的mobx?我使用的是mobx 4.1.1Hmmm,我刚刚将配置添加到我的代码中,并立即在控制台中看到:
由于启用了严格模式,因此不允许在操作之外更改观察到的值。如果要进行此更改,请将代码包装在“操作”中。试图修改:ObservableObject@1.playSpots[..].state
但是,我的状态更改不在类构造函数中。在构造函数执行期间,可能没有应用严格性。根据对observeValue.ts中代码的通读,在我看来,在构造函数完成之前,您的可观察属性是不可观察的。