reselect: передать несколько параметров составному селектору

Я создал селектор, состоящий из двух других селекторов:

export const getAvailableFilters = createSelector(
  getOpenedFilterMenu,
  isSaleCategory,
  (filterMenu, isSale) => {
    // .... doing stuff
  },
);

getOpenedFilterMenu, а также isSaleCategory зависят от состояния редукции и реквизита компонента, но они зависят от разных реквизитов.

Когда я пытаюсь получить доступ к такому селектору getAvailableFilters(state, ownProps.streamId, activeCategory.id), компилятор TypeScript выдает ошибку, что тип первого параметра не соответствует. Когда я удаляю селектор isSaleCategory из списка селекторов ввода, TS не жалуется. Любая идея, почему это так?

Как мне составить селекторы, которые имеют разные зависимые реквизиты?


person Johannes Klauß    schedule 24.06.2019    source источник


Ответы (1)


inputSelectors (getOpenedFilterMenu и isSaleCategory) вызываются с теми же аргументами, что и ваш reselectselector (state, ownProps.streamId, activeCategory.id). Кажется, что ваши inputSelectors и конечный селектор ожидают разные аргументы.

Быстрое решение может состоять в том, чтобы обернуть ваши inputSelectors в функцию адаптера, чтобы передать им ожидаемые аргументы:

export const getAvailableFilters = createSelector(
  (state, streamId, activeCategoryId) => getOpenedFilterMenu(state, activeCategoryId),
  (state, streamId, activeCategoryId) => isSaleCategory(state, streamId),
  (filterMenu, isSale) => {
    // .... doing stuff
  },
);
person Andrea Carraro    schedule 26.07.2019