Javascript 使用哪种MobX模式来检测变化和改变其他观察值?
我多次阅读了和的描述,但当我检测到一个观察到的变化并且我想更新其他观察到的变化时,我仍然不清楚使用哪种模式 示例 我有一个地址对象,如下所示。每当国家/地区发生变化时,我希望重置/重新初始化所有其他字段。一种方法是在Javascript 使用哪种MobX模式来检测变化和改变其他观察值?,javascript,mobx,Javascript,Mobx,我多次阅读了和的描述,但当我检测到一个观察到的变化并且我想更新其他观察到的变化时,我仍然不清楚使用哪种模式 示例 我有一个地址对象,如下所示。每当国家/地区发生变化时,我希望重置/重新初始化所有其他字段。一种方法是在Address类中设置一个@action setCountry(){…},该类负责设置其他可观察对象。但是,我没有这种奢侈,因为我的UI使用通用技术来更新存储属性,即\uu.set(entity、attr、value)。因此,我想使用类似于autorun的方法来检测变化并更新其余的可
Address
类中设置一个@action setCountry(){…}
,该类负责设置其他可观察对象。但是,我没有这种奢侈,因为我的UI使用通用技术来更新存储属性,即\uu.set(entity、attr、value)
。因此,我想使用类似于autorun
的方法来检测变化并更新其余的可观测值。正确的方法是什么
class Address {
@observable name;
@observable line1;
@observable line2;
@observable city;
@observable state;
@observable zip;
@observable country;
...
}
这听起来似乎适合您的用例
示例()
您希望如何更新其他观测值?对我来说,这听起来像是一个很好的用例,因此您的派生值会自动更新。其他值不是派生的,所以在这种情况下计算是不合适的。一个用例是这样的:根据所选择的国家,我希望将其他观察值默认为该国家的总部-这可能是理想的90%的时间。但是,用户可以自由地将地址更改为其他任何内容。这就是我想观察国家变化并做出适当反应的地方。谢谢你,@Tholle。这是非常有用的。出于好奇,是否可以将
observe()
放在Address
类中并捕获它的处理器?我真的希望地址实例来封装这个逻辑。@Naresh没问题!您可以在需要处置侦听器时执行并调用自定义destroy
方法。太好了,@Tholle!再次感谢您的帮助。@Naresh太好了!很高兴我能帮忙。
class Address {
@observable name = '';
@observable line1 = '';
@observable line2 = '';
@observable city = '';
@observable state = '';
@observable zip = '';
@observable country = '';
}
const address = new Address();
observe(address, change => {
if (change.name === 'country' && change.newValue === 'Sweden') {
address.city = 'Stockholm';
}
});
autorun(() => {
console.log(toJS(address));
});
setTimeout(() => {
address.country = 'Sweden';
}, 2000);