В документации Redux о middleware, вы можете увидеть, что ES6 стрелка функции цепи:
logger = store => next => action =>
выглядит следующим образом при переводе на ES5:
function logger(store) { // this is not the store, just an object with getState and dispatch
return function wrapDispatchToAddLogging(next) {
return function dispatchAndLog(action) {
console.log('dispatching', action)
let result = next(action)
console.log('next state', store.getState())
return result
}
}
}
Почему нам нужна функция что возвращает функцию:
Это называется частичным приложением, и вы можете узнать больше о это в этом article.
Основная идея состоит в том, что если вам нужно предоставить 3 аргумента для функции, но у вас есть только 1 из них сейчас, 1 позже, а третий будет в далеком будущем, вы можете применить аргументы по когда они доступны, а не сразу. Каждый раз, когда вы применяете аргумент, вы получаете новую функцию, которая имеет параметр «хранится» в его контексте.
В Redux
Промежуточное необходимо частичное приложение, потому что есть несколько шагов в создании middleware's chain:
Примечание: это реальный «магазин», который передается 1 аргумент:
const middlewareAPI = {
getState: store.getState,
dispatch: (action) => dispatch(action)
}
я Массив terate промежуточного программного обеспечения, в вызова каждой функции и поставить middlewareAPI каждой функции (store =>
парам):
цепи = middlewares.map (промежуточного слоя => промежуточного слоя (middlewareAPI))
составить массив промежуточное программное:
диспетчерских = Compose (... цепь) (store.dispatch)
и compose проходит каждый промежуточное программное обеспечение в качестве параметра один перед этим next =>
и передать dispatch
до последнего:
возвращение funcs.reduce ((а, б) => (... арг) => а (Ь (... арг)))
Теперь промежуточного программного простая функция только один параметр action =>
, и всякий раз, когда действие перемещается по цепочке промежуточного программного обеспечения, функция action =>
каждого промежуточного программного обеспечения вызывается с текущим действием.
Отлично! Вы многое прояснили! –
Добро пожаловать :) –