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

NGRX嵌套Feature时自动生成Selector失效问题求助

NGRX嵌套Feature选择器问题解决方法

一、无需手动重定义所有选择器的方案

自动生成的选择器默认从根State的对应Feature节点取值,当Feature嵌套在子State下时,只需重新指定该Feature的根选择器路径即可:

  1. 先创建substate1的根选择器:
// 推荐用createFeature创建substate1,自动生成根选择器
export const substate1Feature = createFeature({
  name: 'substate1',
  reducer: combineReducers({
    feature1: feature1.reducer,
    feature2: feature2.reducer,
  }),
});
export const selectSubstate1 = substate1Feature.selectSubstate1;
  1. 重写feature1的selectFeatureState(自动生成选择器的基础):
// 让feature1的根选择器指向substate1下的feature1节点
feature1.selectFeatureState = createSelector(
  selectSubstate1,
  (state) => state.feature1
);

完成后,原来自动生成的feature1.selectA、feature1.selectB就能正常从嵌套路径取值,无需逐个重定义。

二、手动组合选择器的方案(若上述方法不适用)

如果需要单独编写目标选择器,可以复用自动生成的feature1.selectA,步骤如下:

  1. 先创建substate1的根选择器(同上述步骤1):
export const substate1Feature = createFeature({
  name: 'substate1',
  reducer: combineReducers({
    feature1: feature1.reducer,
    feature2: feature2.reducer,
  }),
});
export const selectSubstate1 = substate1Feature.selectSubstate1;
  1. 编写组合选择器,复用自动生成的选择器:
export const selectFeature1A = createSelector(
  // 先获取substate1下的feature1节点
  createSelector(selectSubstate1, (state) => state.feature1),
  // 直接复用feature1自动生成的selectA
  feature1.selectA
);

或者更简洁的写法:

export const selectFeature1A = createSelector(
  selectSubstate1,
  (substate1) => feature1.selectA(substate1.feature1)
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:46:12