对数组中所有对象的可观察 属性 进行单个 MobX 自动运行或反应
Make single MobX autorun or reaction for observable property of all objects in array
我有 class 和 @observable
(所有示例都是 Typescript/pseudocode)
class Page {
id: number = 0;
@observable
isVisible: boolean = false;
}
let array = [new Page(), new Page(), new Page()];
还有一些功能,例如:
changeVisibility(obj)
{
//ajax call like .post("/api/changeVisibility/", {id:obj.id, isVisible:obj.isVisible})
}
我想对任何对象的 isVisible
变化做出反应。
我可以枚举数组并制作类似的东西:
array.forEach(el => {
reaction(
() => el.isVisible,
isVis => changeVisibility(el);
});
});
但是我可以用一种功能做到这一点吗?
有点 "array observer that reacts to element's property change"。
像这样:
reaction(array, //source
(el) => el.isVisible, //observable to react
(el) => changeVisibility(el) //callback with object
)
如果反应负责发送单个页面的更新,我会在 Page
构造函数本身中设置该反应,或者在页面中为此设置一个实用函数,这样你就不会必须让你的页面数组与你的反应处理器数组保持同步(但作为最佳实践,如果你想删除页面,请处理反应)
我有 class 和 @observable
(所有示例都是 Typescript/pseudocode)
class Page {
id: number = 0;
@observable
isVisible: boolean = false;
}
let array = [new Page(), new Page(), new Page()];
还有一些功能,例如:
changeVisibility(obj)
{
//ajax call like .post("/api/changeVisibility/", {id:obj.id, isVisible:obj.isVisible})
}
我想对任何对象的 isVisible
变化做出反应。
我可以枚举数组并制作类似的东西:
array.forEach(el => {
reaction(
() => el.isVisible,
isVis => changeVisibility(el);
});
});
但是我可以用一种功能做到这一点吗?
有点 "array observer that reacts to element's property change"。
像这样:
reaction(array, //source
(el) => el.isVisible, //observable to react
(el) => changeVisibility(el) //callback with object
)
如果反应负责发送单个页面的更新,我会在 Page
构造函数本身中设置该反应,或者在页面中为此设置一个实用函数,这样你就不会必须让你的页面数组与你的反应处理器数组保持同步(但作为最佳实践,如果你想删除页面,请处理反应)