如何使用 NgRx 将结果从一个选择器传递到另一个选择器

问题描述 投票:0回答:1

我有以下选择器,我希望它返回排序和过滤列表。

export const selectSortedAndFilteredDataServices = (
    selectProperties: SelectProperties,
): MemoizedSelector<AppState, DataService[], DefaultProjectorFn<DataService[]>> =>
    createSelector(
        selectDataServices,
        selectSortedDataServices(selectProperties.sort),
        selectFilteredDataServices(selectProperties.filter),
        (state: DataServiceState) => state.dataServices,
    );

我希望

selectSortedDataServices
选择器将其结果传递给下一个选择器,但是在每一步中,子选择器都在对原始列表进行排序和过滤。

我需要更改什么才能将每个选择器的结果传递给下一个选择器?

angular ngrx
1个回答
0
投票

这不是 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
)

顺便说一句,我不会使用属性或带有属性的选择器工厂,因为那样你就失去了选择器缓存(记忆)。此时你需要的一切都应该在状态中准备就绪。

© www.soinside.com 2019 - 2024. All rights reserved.