Mobx中带有参数的计算方法

时间:2018-12-18 00:14:49

标签: javascript mobx mobx-react

假设我有一个看起来像这样的对象ResourceX

interface ResourceX {
  id: string,
  type: string,
  label: string
}

我还有一个后端API,该API允许我获取具有特定ID(resourceService.get(123) = Resource with id 123)的ResourceX

现在在前端,我想在mobx存储的可观察映射中存储和访问特定的ResourceX。当从我的商店中检索ResourceX时,我想确保某个ResourceX的可能的观察者仅对资源对象本身的变化做出反应,而不对整个可观察的地图做出反应-因此,我在get(id)中使用computed方法。

商店看起来像这样:

class ResourceStore {
    @observable resources: Map<string, ResourceX> = new Map();

    /**
     * Loads the ResourceX with the given id from the server
     * and stores it in the observable map.
     */
    @action loadResourceX(id: string) {
        return resourceService.get(id).then(resource => {
            this.resources.set(id, resource))
    }

    /**
     * Gets the ResourceX with the given id from the store.
     */
    public getResourceX(id: string) {
        return computed(() => this.resources.get(id)).get();
    }
}

由于@computed仅可用于吸气剂,因此不能接受任何参数。因此,我必须使用computed(() => ...)语法。

现在我的问题是,是否有任何特定原因导致mobx开箱即用,只为没有参数的getter提供@computed,也许还有一种“ mobx”方式可以完成我想做的事情? / p>

我知道https://github.com/mobxjs/mobx/issues/291,但我想知道我是否可能以错误的方式使用mobx。

0 个答案:

没有答案