Angular 14 + NgRx使用store.select时出现重载错误求助
Angular 14集成NgRx时store.select重载错误解决
问题现象
升级至Angular 14后,组件中调用store.select(getUserStateUser)触发重载错误,相同代码在Angular 10中可正常运行。错误核心是selector的类型与store的根状态不匹配。
代码问题定位
根reducer中的getUserState selector定义错误:
// 错误写法:直接接收子状态类型,而非根状态 export const getUserState = (state:fromUser.userReducerState) => state
NgRx的store基于**根状态RootReducerState**运行,所有根级别selector必须从根状态中提取对应的子状态切片,而非直接接收子状态类型。
修复步骤
- 修改根reducer中的
getUserStateselector,改为从根状态获取usersstate切片:
export const getUserState = (state: RootReducerState) => state.usersstate
其余基于
getUserState的派生selector无需修改,它们会自动继承正确的输入类型。(可选优化)组件中建议使用
async管道替代手动subscribe,避免内存泄漏:
// 组件类中定义可观察对象 users$ = this.store.select(getUserStateUser); // 模板中使用 <div *ngFor="let user of users$ | async">{{user.name}}</div>
验证修复
修改后重新编译项目,store.select的重载错误会消失,组件可正常从NgRx store中获取状态数据。
内容的提问来源于stack exchange,提问作者Jhon Wick
相关产品推荐
相关产品推荐

