, если у меня есть действие асинхронного с апи вызовом, который может быть либо действием возвращает функцию:Как отменить действие Redux Async? (Несколько шагов назад в состоянии)
export function asyncAction(itemId) {
return (dispatch) => {
dispatch(requestStarted());
return sendRequest(itemId).then(
(result) => dispatch(requestSuccess()),
(error) => dispatch(requestFail())
);
};
}
или один возвращает объект и используют промежуточное программное обеспечение, чтобы перехватить его и сделать материал:
export function asyncAction(itemId) {
return {
type: [ITEM_REQUEST, ITEM_REQUEST_SUCCESS, ITEM_REQUEST_FAILURE],
promise: sendRequest(itemId),
userId
};
}
// same middleware found in https://github.com/rackt/redux/issues/99
export default function promiseMiddleware() {
return (next) => (action) => {
const { promise, ...rest } = action;
if (!promise) {
return next(action);
}
next({ ...rest, readyState: 'request');
return promise.then(
(result) => next({ ...rest, result, readyState: 'success' }),
(error) => next({ ...rest, error, readyState: 'failure' })
);
};
}
Теперь мой вопрос: Как откатить в состояние до того, как asyncAction отправляется, который по существу означает два шага обратно в состояние (успех/провал => запросу) ж/вызов api для отмены аш-ай.
Например, после удаления элемента todo (который является асинхронным действием) всплывающая закутка отображается с опцией undo, после щелчка по ней удаленный элемент todo будет добавлен обратно в интерфейс пользователя вместе с вызовом api, чтобы добавить его Вернуться к db.
Я пробовал redux-undo, но я чувствую, что он не предназначен для решения таких проблем.
Или я должен забыть о 'undo' и просто отправить совершенно новый addTodo действие, когда пользователь нажимает кнопку «Отменить»?
Заранее спасибо :-)