Промежуточное программное обеспечение -> перехватить / заблокировать / преобразовать?
Мы управляем СПА. отправленные действия (не компоненты) основаны на аутентификации.
Можно ли перехватить и преобразовать отправленные действия?
т.е.
dispatch({
type: 'FOO',
payload: { some: value }
})
function magicMiddleware(action) => decide if authorized.
if no...
dispatch({
type: 'BAR',
payload: { new: value }
})
else continue
обратите внимание, что "FOO" никогда не должен попасть в редуктор
2 ответа
Да, это абсолютно один из вариантов использования промежуточного программного обеспечения. Любое промежуточное программное обеспечение может проверять и изменять любое действие, проходящее через конвейер, прежде чем оно достигнет редукторов, и даже предотвращать продолжение действия.
Вы можете прочитать страницу Middleware в документации Redux, а также статьи в категории Redux Middleware в моем списке ссылок React/Redux. Это должно дать вам лучшее представление о том, как работает промежуточное программное обеспечение и как вы можете его использовать.
Почему бы не позволить этому действию поразить редуктор и игнорировать его там?
(лучший вариант ИМО)
switch (action.type) {
case SOMETHING_NOT_FOO:
return Object.assign({}, state, {
whatever other new object here...
})
default:
return state
}
Если вы делаете это через промежуточное программное обеспечение, вам необходимо решить, хотите ли вы отправить это действие в редуктор или нет:
function yourMiddleware(nextDispatch) {
return function(action) {
// do stuff
if (action.type !== 'FOO') {
return nextDispatch(action);
} else {
return nextDispatch({type: 'dummy'}); // need to send an action
}
}
}