在 mobx 中,如果我想使用继承,我需要使用 makeObservable 而不是 makeAutoObservable。但是使用 makeObservable 需要我命名改变状态的操作,那么如何将 setter 声明为操作,因为它与 getter 具有相同的名称?
换句话说,我写的 SETTER_FOR_MYVAR 的位置是什么,或者达到相同效果的另一种方法是什么?
class BaseClass {
_myvar = null
set myvar(val) {
this._myvar = val;
}
get myvar() {
return this._myvar;
}
other_action() {
this._myvar = 5;
}
constructor() {
makeObservable(this, {
_myvar: observable,
other_action: action,
SETTER_FOR_MYVAR: action
});
}
}
是的,我知道我可以将其外包给另一个辅助函数 _myvar_setter 并声明一个操作,但这看起来很难看,我希望有更好的方法。
只需标记myvar
as computed
,一切都应该开箱即用(如果我正确理解你想要什么):
constructor() {
makeObservable(this, {
_myvar: observable,
myvar: computed,
other_action: action
});
}
代码沙箱
摘自文档:
也可以为计算值定义一个设置器。请注意,这些设置器不能用于直接更改计算属性的值,但它们可以用作推导的“逆”。 Setter 会自动标记为操作。
Example:
class Dimension {
length = 2
constructor() {
makeAutoObservable(this)
}
get squared() {
return this.length * this.length
}
set squared(value) {
this.length = Math.sqrt(value)
}
}
文档中的更多信息
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)