在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
相关产品推荐
相关产品推荐

