В чем разница между 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 промежуточное - это фрагмент кода, который обертывается вокруг магазина