如何在NGRX Reducer中获取Entity的列表长度?
解决方案
要在Reducer中获取当前实体列表的长度,直接利用NGRX Entity State自带的ids数组即可——ids数组存储了所有已存在实体的ID,它的长度就是当前实体的总数量。
1. 完善Reducer逻辑
修改你的Reducer处理函数,通过state.ids.length获取列表长度并赋值给initialItemListSize:
on(ItemActions.saveItemListSizeNow, (state) => { const size = state.ids.length; return { ...state, initialItemListSize: size }; }),
2. 确保Action定义正确
确认saveItemListSizeNow是一个无负载的简单action,示例定义如下:
export const saveItemListSizeNow = createAction( '[Item] Save Item List Size Now' );
补充说明
NGRX Entity的EntityState默认包含两个核心属性:
ids(类型为string[] | number[]):所有实体的ID集合,仅包含已存在的实体IDentities(类型为Dictionary<T>):以ID为键的实体对象映射
state.ids.length的性能优于Object.values(state.entities).length,因为不需要遍历实体对象即可直接获取数量,结果完全一致。
内容的提问来源于stack exchange,提问作者EchtFettigerKeks
相关产品推荐
相关产品推荐

