В @ ngrx / data, выполняющих оптимистическое c удаление (нашего героя "Человек-муравей"), вызывает изменение 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
}
}
}
}
}
}
Используя приведенный ниже эффект, я вызвал UNDO_ONE, когда удаление завершилось неудачно из-за ошибки http-запроса:
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>
Здесь я выполняю удаление * optimisti c и команду SAVE_DELETE_ONE_ERROR, отправляя действие UNDO_ONE через эффект.
Когда я заменяю UNDO_ONE на UNDO_ALL changeState
возвращается обратно к {}
, что дает мне основание думать, что changeState
должно вернуться к {}
, если мы отменяем удаление .