angular - Ngrx 选择器未定义的 EntityAdapter
问题描述
在这个问题上兜圈子。每次我似乎使用选择器时,它都是未定义的。我检查了其他帖子以及我已经拥有的他们缺少的代码。使用选择器时我一直不确定。我也有 ngrx devtools 设置。任何帮助将不胜感激。
零件:
import * as fromBusiness from '@app/@store/reducers/index';
ngOnInit(): void {
const id = this.params.id;
this.business$ = this.store.pipe(select(fromBusiness.getBusinessEntityById(), { id }))
.pipe(
map((business: BusinessModel) => {
return this.business = business;
}),
);
console.log(this.business);
}
功能模块
StoreModule.forFeature('businesses', fromBusiness.businessFuncReducer),
减速器:
export interface State extends EntityState<BusinessModel> {}
export const adapter: EntityAdapter<BusinessModel> = createEntityAdapter<
BusinessModel
>( {
selectId: (business: BusinessModel) => business.id,
});
export const initialState = adapter.getInitialState({});
export const businessReducer = createReducer(
initialState,
//reducer methods here, upsertone, addone etc
);
export function businessFuncReducer(state: State | undefined, action: Action) {
return businessReducer(state, action);
}
export const businessFeatureSelector = createFeatureSelector<State>(
'businesses'
);
export const {
selectIds,
selectEntities,
selectAll,
selectTotal,
} = adapter.getSelectors();
export const getAllBusinesses = createSelector(
businessFeatureSelector,
selectAll
);
减速器.index.ts
export interface State {
business: fromBusiness.State;
}
export const selectBusinessState = createFeatureSelector<fromBusiness.State>(
'businesses'
);
export const selectBusinessEntities = createSelector(
selectBusinessState,
fromBusiness.selectEntities
);
export const getBusinessEntityById = () => {
return createSelector(
selectBusinessEntities,
(entities: Dictionary<BusinessModel>, props: {id: string}) => {
return entities[props.id];
},
);
};
感谢您对此的任何帮助。花了2天没有解决方案。附件是 devtools 树的屏幕截图。
解决方案
事实证明,这不是选择器或模块。这就是我消费它的方式。周围的例子对我不起作用,所以我的做法略有不同。
推荐阅读
- git - 在 Azur DevOps 中将构建服务“用户”添加到“项目集合构建服务”
- java - 我可以在 java 方法中模拟休息调用吗
- java - 为什么 AVG 函数的结果为空?
- reactjs - 如何解决第一个渲染中的问题?
- c-preprocessor - 预处理器:为什么要仔细检查是否需要包含头文件?
- nginx - NGINX。OpenShift 集群之间的负载平衡。如何获取上游服务器的名称?
- java - Spring Boot 拦截器 - 如何排除某些 URL
- node.js - 在 Ubuntu 18.04 中使用 MongoDB 映像和 Nginx 运行 Dockerhub 映像
- c - 通过地址调用强制更改数组的地址(数组名称指向的位置)。错误存在,但它似乎工作虽然..?
- c# - Windows 窗体中的 C# WPF SendKey