Предположим, у меня есть объект ResourceX
, который выглядит следующим образом.
interface ResourceX {
id: string,
type: string,
label: string
}
У меня также есть бэкэнд-API, который позволяет мне получить ResourceX с определенным идентификатором (resourceService.get(123) = Resource with id 123
)
Теперь на внешнем интерфейсе я хотел бы сохранить и получить доступ к определенному ResourceX на наблюдаемой карте магазина mobx.И при извлечении ResourceX из моего магазина я хочу убедиться, что возможные наблюдатели определенного ResourceX реагируют только на изменения самого объекта ресурса, а не всей наблюдаемой карты - поэтому я использую computed
в методе get (id).
Хранилище выглядит примерно так:
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 из коробки предоставляет только @computed
для получателей без параметров, и, возможно, есть более «мобский» способ сделать то, что я пытаюсь сделать?
Мне известно о https://github.com/mobxjs/mobx/issues/291, но я бы хотел знать, не использую ли я mobx неправильно.