Промежуточное программное обеспечение -> перехватить / заблокировать / преобразовать?

Мы управляем СПА. отправленные действия (не компоненты) основаны на аутентификации.

Можно ли перехватить и преобразовать отправленные действия?

т.е.

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 
    } 
  }
}
Другие вопросы по тегам