Un middleware en Redux no es más que una forma de interceptar los llamados al dispatch y agregar lógica adicional.
Por ejemplo, si queremos imprimir todos los llamados al dispatch y los cambios al estado podemos crear el siguiente middleware:
Copy const logger = store => next => action => {
console . log ( " dispatching " , action ) ;
const result = next ( action ) ;
console . log ( " next state " , store . getState ()) ;
return result ;
}; Para configurar este middleware en el store debemos pasarle un tercer parámetro a createStore utilizando la función applyMiddleware de Redux:
Copy import { createStore , applyMiddleware } from ' redux ' ;
// ... la función logger
const store = createStore (
reducer ,
{ tasks : [] } ,
applyMiddleware ( logger ) // acá configuramos el middleware
) ; Veamos otro ejemplo. Imagina que queremos retrasar todos los llamados al dispatch por 5 segundos. Podemos crear un middleware de la siguiente forma:
Copy const delayer = store => next => action => {
return setTimeout ( () => {
next ( action )
}, 5000 ) ;
};
const store = createStore (
reducer ,
{ tasks : [] } ,
applyMiddleware ( delayer )
) ; Y ahora, cada vez que llamemos dispatch, el cambio de estado se va a realizar 5 segundos después.
También es posible instalar varios middlewares separándolos por comas:
En la práctica es raro que escribas un middleware para una aplicación. Sin embargo, existen librerías como redux-thunkarrow-up-right o redux-sagaarrow-up-right que hacen uso de los middlewares.