Промежуточное программное обеспечение в Redux определяется сигнатурой
const middleware = store => next => action => {}
Какое определение действий и как они должны создаваться?
Я хотел создать новое промежуточное ПО дляобработка асинхронных действий, где действия могут содержать инструкции для побочного эффекта, а также действие для отправки в случае успеха. Я установил свое промежуточное программное обеспечение следующим образом:
const effectMiddleware = store => next => async (action) => {
// Assert it's actually a command
if (action.command !== undefined) {
next(action)
const result = await Cmd.execute(action.command) // returns a redux action
return store.dispatch(result)
else {
next(action)
}
}
Однако я столкнулся со странными ошибками, когда следующее действие не было выполнено. Я обнаружил, что на самом деле «действия» промежуточного программного обеспечения не совпадают с действиями, которые вы определяете в своем приложении. Используя консольный журнал, я обнаружил, что действие в промежуточном программном обеспечении на самом деле
action: Object { type: "MY_ACTION", payload: {} }
stack: undefined
timestamp: 1571214156244
type: "PERFORM_ACTION"
, поэтому он не выполнил действие, возвращаемое Cmd.execute. Мне удалось обойти это путем создания функции wrapAction:
const wrapAction = (action) =>
({ action: action, type: "PERFORM_ACTION", stack: undefined, timestamp: new Date().valueOf() })
const effectMiddleware = store => next => async (action) => {
// Assert it's actually a command
if (action.action.command !== undefined) {
next(action)
const result = await Cmd.execute(action.action.command) // Cmd.execute returns a Promise<redux action>
return store.dispatch(wrapAction(result))
else {
next(action)
}
}
Однако я нигде не могу найти документацию по этому вопросу, и поэтому мой вопрос: как на самом деле используется промежуточное программное обеспечение? Какой официальный способ «обернуть» действия в эти действия промежуточного программного обеспечения?