Вычислительный метод с параметрами в mobx - PullRequest
0 голосов
/ 18 декабря 2018

Предположим, у меня есть объект 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 неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...