如何获取减速器中的NGRX/实体长度



在客户端项目中,我使用NGRX/Store和NGRX/Entity。

虽然存储区的大部分由实体组成,但我必须在状态中存储其他值。出于商业原因,我需要在某个时间点上所有项目的长度。

export interface State extends EntityState<Item> {
initialItemListSize: number; // this should hold the length of entity-adapters items-list-size at a certain point
}

不管怎样,在某个时候我只想

this.store.dispactch(saveItemListSizeNow);

呼叫。

现在我想知道我必须在哪里实现逻辑(获取列表长度(。

起初我认为在减速器

on(Itemctions.saveItemListSizeNow, (state) => {
const size = ... //<--- no Idea how to get the length here
return { ...state, initialItemListSize: size };
}),

有人能给我一个答案吗?

您可以访问状态上的实体。

state.ids.length

例如:

on(Itemctions.saveItemListSizeNow, (state) => {
const size = ... //<--- no Idea how to get the length here
return { ...state, initialItemListSize: state.ids.length};
}),

您的操作可以用有效载荷数据来定义,这些数据可以在调度时传递,例如:

import { createAction, props } from '@ngrx/store';
export const saveItemListSizeNow= createAction(
'[Action Source] Save Item list size',
props<{ itemListSize: number }>()
);

当你发送它时,

store.dispatch(saveItemListSizeNow({ itemListSize: givenSize }));

你的减速器会像这个

on(Itemctions.saveItemListSizeNow, (state, action) => {
const size = action.itemListSize;
return { ...state, initialItemListSize: size };
}),