我有以下选择器,我希望它返回排序和过滤列表。
export const selectSortedAndFilteredDataServices = (
selectProperties: SelectProperties,
): MemoizedSelector<AppState, DataService[], DefaultProjectorFn<DataService[]>> =>
createSelector(
selectDataServices,
selectSortedDataServices(selectProperties.sort),
selectFilteredDataServices(selectProperties.filter),
(state: DataServiceState) => state.dataServices,
);
我希望
selectSortedDataServices
选择器将其结果传递给下一个选择器,但是在每一步中,子选择器都在对原始列表进行排序和过滤。
我需要更改什么才能将每个选择器的结果传递给下一个选择器?
这不是 createSelector 函数的工作方式。
伪代码:
const mySelector = createSelector(
selector1,
selector2,
selector3,
(selector1Result, selector2Result, selector3Result) => //your sort and filter logic
因此,考虑到这一点,您可以构建一个服务来映射和过滤结果,或者您可以组合不同的选择器来拆分您的逻辑:
const selectDataServices = createSelector(...)
const selectSortedDataServices = (selectProperties: SelectProperties) => createSelector(
selectDataServices,
(services) => //your sort logic
const selectFilteredDataServices = (selectProperties: SelectProperties) => createSelector(
selectSortedDataServices,
(services) => //your filter logic
)
顺便说一句,我不会使用属性或带有属性的选择器工厂,因为那样你就失去了选择器缓存(记忆)。此时你需要的一切都应该在状态中准备就绪。