При использовании универсального модального окна или всплывающего окна с кнопкой подтверждения становится полезной возможность передать действие в этот компонент, чтобы его можно было отправить, когда вы нажмете «Подтвердить».
Действие может выглядеть примерно так:
export function showConfirm({modalConfirm}) {
return {
type: 'MODALS/SHOW_MODAL',
payload: {
modalId: getUuid(),
modalType: 'CONFIRM',
modalConfirm : modalConfirm,
},
};
}
Где modalConfirm
- другой объект действия, например:
const modalConfirm = {
type: 'MAKE_SOME_CHANGES_AFTER_CONFIRM',
payload: {}
}
Действие modalConfirm
отправляется внутри модального компонента с использованием dispatch(modalConfirm)
или даже dispatch(Object.assign({}, modalConfirm, someResultFromTheModal)
К сожалению, это решение работает, только если modalConfirm
является простым объектом действия redux. Эта система явно очень ограничена. Есть ли способ передать функцию (например, преобразователь) вместо простого объекта?
В идеале, что-то полнофункциональное, например:
const modalConfirm = (someResultFromTheModal) => {
return (dispatch, getState){
dispatch({
type: 'MAKE_SOME_UPDATES',
payload: someResultFromTheModal
})
dispatch({
type: 'SAVE_SOME_STUFF',
payload: http({
method: 'POST',
url: 'api/v1/save',
data: getState().stuffToSave
})
})
}
}