【发布时间】:2023-03-05 11:41:01
【问题描述】:
我正在使用不可变的 ngrx 存储来处理我的 Angular 2 应用程序中的数据。我有一个 reducer 将数据从成功的 API 调用转换为不可变存储的 id 到对象的映射:sessions: Map<number, ISession>。要从 action.payload 中的原生数组 ISession[] 转换,我在 withMutations 调用中执行了一个 foreach 循环:
case SessionsActions.LOAD_SESSIONS_SUCCESS:
return state.withMutations(map => {
map.set('loading', false);
action.payload.forEach((session: ISession) => {
console.log("Setting ",session);
map.setIn(['sessions', session.id], session );
});
}) as ISessions;
我得到了预期的控制台输出,共有四项:
Setting Object {id: 6, payslip: null, invlice: null, paidByClient: false, completed: false…}
Setting Object {id: 8, payslip: null, invlice: 1, paidByClient: true, completed: false…}
Setting Object {id: 9, payslip: 1, invlice: 1, paidByClient: true, completed: false…}
Setting Object {id: 7, payslip: null, invlice: null, paidByClient: false, completed: false…}
但是商店里装满了 10 件商品,它从 0 到存储数据本身的最大值 (9) 填充 id 的空值:
知道为什么会发生这种行为吗?
【问题讨论】:
标签: angular immutable.js ngrx