TL;DR

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

Одно основное правило для этого: вы всегда должны возвращать результат функции next для другого промежуточного ПО. Поскольку ПО промежуточного слоя работает как цепочка, отсутствие возврата результата от ПО промежуточного слоя (которое представляет собой действие, возвращаемое предыдущим примененным ПО промежуточного слоя) искажает цепочку с неопределенным значением.

Вы можете найти аналогичный фрагмент кода в официальной документации по редуксу.

Но давайте разберемся с промежуточным ПО на более глубоком уровне.

Итак, что такое промежуточное ПО в Redux?

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

Это удобный инструмент, который дает вам полный контроль над циклом обновления магазина.

Объяснение шаблона промежуточного программного обеспечения

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

Итак, у нас есть 3 функции, задействованные в создании промежуточного программного обеспечения. Эти функции обертывают исходную функцию dispatch магазина и добавляют некоторый код.

Но зачем редуксу нужны 3 функции?

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

Итак, когда вы создаете магазин, вы можете сделать это:

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

Примечание о связывании промежуточного программного обеспечения-
Выполнение промежуточного программного обеспечения выглядит следующим образом:
промежуточное программное обеспечение 1 -> промежуточное программное обеспечение 2 -> промежуточное программное обеспечение 3 -> исходная отправка.

После того как хранилище обработает действие, возвращаемые значения возвращаются в следующем порядке (начиная с исходной отправки):
промежуточное ПО1 ‹- промежуточное ПО2 ‹- промежуточное ПО3 ‹- исходная отправка

Цепочка всего вместе

Итак, теперь, когда мы понимаем, что промежуточное ПО связано с редуксом, мы можем понять, как написать правильное.

Вернемся к этому коду.

Первая функция — это просто применение API магазина из redux к промежуточному программному обеспечению, что делает доступными функции getState и dispatch. Кроме того, когда выполняется первая функция, redux создает здесь саму цепочку промежуточного программного обеспечения.

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

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

Здесь нужно понять две основные части.

  1. Вы должны вызвать nextDispatch с аргументом action. В противном случае действия не дойдут до магазина.
  2. По соглашению лучше всегда возвращать значение из промежуточного программного обеспечения. Отсутствие возврата значения не повлияет на выполнение другого промежуточного программного обеспечения, но это испортит всю цепочку с неопределенным возвращаемым значением, и если какое-либо другое промежуточное программное обеспечение рассчитывает на это, это может вызвать ошибки.

Вывод

Написание мидлвара redux очень просто и может быть сведено к следующему:

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

Вот и все. Теперь вы знаете все, что вам нужно для создания промежуточного ПО Redux.