堆栈闪电战
在@ngrx/data 中进行乐观删除(我们的英雄“蚁人”)会导致 changeState 被更新,如下所示:
{
"entityCache": {
"Hero": {
"ids": [1, 2, 3, 5, 6],
"entities": {
"1": {
"id": 1,
"name": "Spiderman",
"power": 1
},
"2": {
"id": 2,
"name": "Thor",
"power": 5
},
"3": {
"id": 3,
"name": "Hulk",
"power": 6
},
"5": {
"id": 5,
"name": "Iron Man",
"power": 9
},
"6": {
"id": 6,
"name": "Thanos",
"power": 10
}
},
"entityName": "Hero",
"filter": "",
"loaded": true,
"loading": true,
"changeState": {
"4": {
"changeType": 2,
"originalValue": {
"id": 4,
"name": "Ant-Man",
"power": 7
}
}
}
}
}
}
使用下面的效果,当删除由于 http 请求错误而失败时,我触发了 UNDO_ONE:
deleteError$ = createEffect(() => {
return this.actions$.pipe(
ofEntityType("Hero"),
ofEntityOp([EntityOp.SAVE_DELETE_ONE_ERROR]),
map(action => {
const id = action.payload.data.originalAction.payload.data;
const options: EntityActionOptions = {
// tried various values
}
return new EntityActionFactory().create( <-----------------------dispatch UNDO_ONE action-----------
"Hero",
EntityOp.UNDO_ONE,
id,
options
);
})
);
});
问题:调度 UNDO_ONE 操作是否应该恢复changeState
即删除由删除操作引起的实体状态这部分的更改?
如果是这样,您如何正确调度 UNDO_ONE 以及需要哪些参数?
我探索了EntityActionFactory.create() 方法的数据和选项的不同值:
EntityActionFactory.create<P = any>(entityName: string, entityOp: EntityOp, data?: P, options?: EntityActionOptions): EntityAction<P>
在这里,我正在执行一个乐观删除,并在 SAVE_DELETE_ONE_ERROR 上通过效果调度 UNDO_ONE 操作。
当我将 UNDO_ONE 换成 UNDO_ALL 时,changeState
确实会恢复到{}
这让我有理由认为changeState
应该恢复到{}
因为我们正在取消删除。