对数组中所有对象的可观察 属性 进行单个 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 构造函数本身中设置该反应,或者在页面中为此设置一个实用函数,这样你就不会必须让你的页面数组与你的反应处理器数组保持同步(但作为最佳实践,如果你想删除页面,请处理反应)