重新选择:将多个参数传递给组合选择器

时间:2019-06-24 14:23:59

标签: redux react-redux reselect

我创建了一个由其他两个选择器组成的选择器:

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

getOpenedFilterMenuisSaleCategory取决于redux状态和组件属性,但是它们取决于不同的属性。

当我尝试访问像getAvailableFilters(state, ownProps.streamId, activeCategory.id)这样的选择器时,TypeScript编译器会引发错误,指出第一个参数的类型不匹配。 当我从输入选择器列表中删除isSaleCategory选择器时,TS不会抱怨。知道为什么吗?

如何组成具有不同依赖道具的选择器?

1 个答案:

答案 0 :(得分:1)

使用与getOpenedFilterMenu选择器(isSaleCategoryreselectstate)相同的参数调用

inputSelectors(ownProps.streamIdactiveCategory.id) 。看来您的inputSelectors和最终选择器期望使用不同的参数。

一种快速的解决方案可能包括将inputSelectors包装到and适配器函数中,以将期望的参数提供给它们:

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