You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在NGRX Store中如何区分两个Feature Selector的返回值?

问题:组合Redux Selector后取值异常,如何单独获取不同Reducer的状态值?

我的组合Selector代码:

export const eslectorswaseseftcheserrors = createSelector(
    endsnotfeatureseslectors,
    endsanticeedsnotfeatureeslectors,
    astes => astes.waseseftcheserrors
)

调用方式:

this.waseseftcheserrors = this.store.select(eslectorswaseseftcheserrors);

当前问题:

当其中一个Reducer里的waseseftcheserrors为true时,这个Selector返回的结果会错误地显示两个值都为true,但实际另一个Reducer对应的明明是false。现在想单独获取两个不同Reducer各自的waseseftcheserrors值,不想用传参过滤的方式,有没有更简便的办法?


解决方案:

首先你当前的Selector写法有逻辑漏洞——createSelector的转换函数只接收了第一个Feature Selector的返回值,完全没用到第二个参数,所以才会出现取值混乱的情况。

方案1:分别创建独立Selector(最简便直接)

给每个Reducer单独写对应的Selector,这样就能精准获取各自的状态值:

// 获取第一个Reducer的waseseftcheserrors
export const getFirstWaseseftcheserrors = createSelector(
    endsnotfeatureseslectors,
    state => state.waseseftcheserrors
)

// 获取第二个Reducer的waseseftcheserrors
export const getSecondWaseseftcheserrors = createSelector(
    endsanticeedsnotfeatureeslectors,
    state => state.waseseftcheserrors
)

调用时分别选择对应的Selector即可:

this.firstError = this.store.select(getFirstWaseseftcheserrors);
this.secondError = this.store.select(getSecondWaseseftcheserrors);

方案2:一个Selector返回两个值(如果需要同时获取)

如果确实需要一次获取两个值,修改转换函数让它返回一个包含两个属性的对象,明确区分两个Reducer的状态:

export const getBothWaseseftcheserrors = createSelector(
    endsnotfeatureseslectors,
    endsanticeedsnotfeatureeslectors,
    (firstState, secondState) => ({
        firstError: firstState.waseseftcheserrors,
        secondError: secondState.waseseftcheserrors
    })
)

调用时通过解构获取对应值:

this.store.select(getBothWaseseftcheserrors).subscribe(({firstError, secondError}) => {
    this.firstError = firstError;
    this.secondError = secondError;
});

内容的提问来源于stack exchange,提问作者Unstay Anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 21:57:16