首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >特性内的倍数特性

特性内的倍数特性
EN

Stack Overflow用户
提问于 2022-04-25 16:11:15
回答 1查看 204关注 0票数 0

我用AngularNgRx 13定义了一个存储库。我有一个SharedModule,其中定义了选择器等组件。每个选择器内容都加载在store中,这样就可以避免重复调用API。

这方面的定义如下:

shared.module.ts

代码语言:javascript
复制
/**...*/
 StoreModule.forFeature(clientsFeature),
 StoreModule.forFeature(prioritiesFeature),
/**...*/

clients.feature.ts

代码语言:javascript
复制
import { createFeature, createSelector, createReducer, on } from '@ngrx/store';
import { ClientDTO } from '@shared/model/client.models';

import * as ClientsActions from './clients.actions';

export const initialState: ClientDTO[] = [];

export const clientsFeature = createFeature({
  name: 'clients',
  reducer: createReducer(
    initialState,
    on(ClientsActions.getClientListSuccess, (state, { clients }): ClientDTO[] => clients)
  ),
});

export const selectClientList = createSelector(clientsFeature.selectClientsState, clients => clients);

优先次序的特点是相似的。

我要做的是避免声明每个特性,并使用包含所有子功能的“共享”功能。为此,我创建:

index.ts

代码语言:javascript
复制
import { ActionReducerMap } from '@ngrx/store';
import { ClientDTO } from '@shared/model/client.models';
import { Priority } from '@shared/model/priorities.models';
import { clientsFeature } from './clients/clients.reducer';
import { prioritiesFeature } from './priorities/priorities.reducer';

export const sharedFeatureKey = 'shared';

export interface SharedState {
  clients: ClientDTO[] | null;
  priorities: Priority[] | null;
}

export const reducers: ActionReducerMap<SharedState> = {
  clients: clientsFeature.reducer,
  priorities: prioritiesFeature.reducer,
};

我的shared.module:

代码语言:javascript
复制
    StoreModule.forFeature(fromShared.sharedFeatureKey, fromShared.reducers),

一切都好。

问题

为此,我无法访问列表的内容。我肯定我错过了什么,但我不知道是什么。我收到警告:

ngrx-store.mjs:724 @ngrx/store:状态中不存在“客户端”特性名,因此createFeatureSelector无法访问它。确保它是使用StoreModule.forRoot('clients',.)在加载模块中导入的或StoreModule.forFeature(“客户”,.)如果默认状态是未定义的,如路由器状态,则只能忽略此开发警告消息。

还有另一种类似的优先事项。我很确定问题在选择器中,但经过几个小时的尝试,我无法找到解决方案。

未定义的是选择器内容的日志:

代码语言:javascript
复制
    this.store
      .select(selectPrioritiesList)
      .pipe(take(1))
      .subscribe(priorities => {
        console.log('priorities -->', priorities);
      });

我做错什么了?提前感谢

EN

回答 1

Stack Overflow用户

发布于 2022-04-26 10:35:01

问题在于选择器。因为您添加了额外的“共享”层,所以需要更新选择器。

目前,createFeature是不可配置的,并且使用顶层状态来选择子状态.这意味着您不能使用createFeature提供的选择器,但是您必须手动编写选择器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72002571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档