假设我有一个看起来像这样的对象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。