В чем разница между reducer и middleware?

Я никак не могу понять разницу между применением редуктора и промежуточного. Ряд сайтов описывают промежуточное ПО, даже давая точные определения:

он обеспечивает стороннюю точку расширения между отправкой действия и моментом, когда он достигает редуктора.

или:

промежуточное ПО создается путем создания функциональности, которая обертывает отдельные сквозные проблемы, которые не являются частью вашей основной задачи выполнения.

но из этих всего я понимаю, что там is разница, просто не что. Из того, что я могу сказать, разница в том, что один принимает действие и передает это действие, а другой принимает действие и состояние и "передает состояние". Но у вас все еще есть доступ к магазину в midddleware. Поэтому store и action проходят через промежуточное ПО, а затем редукторы. Так редуктор смог выполнить лесозаготовительный.

хотя ведение журнала кажется очевидным приложением для промежуточного программного обеспечения, есть более неоднозначные примеры. Например, записывая некоторую тривиальную аутентификацию в модуль, вы можете использовать функцию промежуточного ПО для выполнения действия, отправленного пользователем, и определения уровня аутентификации:

import { getAuthLevel } from './auth';

export default store => next => action => {
  return next({...action, auth: getAuthLevel(action.clientId)});
}

у вас может быть куча пользователей, как это:

{
users: [{
  clientId: 'bobsUnqiueClientId',
  user: 'Bob',
  password: 'ilikecats',
  authlevel: 'OVERLORD'
}, {
  clientId: 'anotherUniqueClientId',
  user: 'Alice',
  password: 'boblikescats',
  authlevel: 'MINION'
}]}

тогда у вас могут быть действия, соответствующие различным уровням аутентификации. Можно сопоставить это использование промежуточного программного обеспечения, но вам нужно знать более конкретные детали о действиях, проходящих, и это кажется более "связанным с выполнением" кодом. Но тогда ему не нужно ничего знать о государстве. Ему просто нужно решить, какие действия направить на редукторы.

Так? Пойдет ли такой код в редуктор или в middleware? И может ли кто-нибудь привести другие конкретные примеры, которые прояснят разницу между ними?

1 ответов


A редуктор - это функция, которая принимает некоторую часть вашего состояния и текущее отправленное действие в качестве аргументов и возвращает обновленное состояние. Множественные функции редуктора можно составить совместно для того чтобы сформировать ваше корень редуктор функция, которую вы передаете в createStore(). Редукторыдолжно быть "чисто функциями", без"побочных эффектов". Это означает, что нет вызовов AJAX, нет диспетчерских действий и (в теории) нет регистрации - просто (state, action) => newState. (Теперь ты can у входа в редуктор, и этот код будет работать нормально, но в принципе это еще не то, что редуктор должно сделать.)

A промежуточное - это фрагмент кода, который обертывается вокруг магазина