Skip to content
This repository has been archived by the owner on Apr 4, 2023. It is now read-only.

Latest commit

 

History

History
60 lines (45 loc) · 1.77 KB

middlewares.md

File metadata and controls

60 lines (45 loc) · 1.77 KB

Middlewares

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:

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:

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:

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:

const store = createStore(
  reducer,
  { tasks: []} ,
  applyMiddleware(logger, delayer)
);

En la práctica es raro que escribas un middleware para una aplicación. Sin embargo, existen librerías como redux-thunk o redux-saga que hacen uso de los middlewares.

{% youtube %} https://www.youtube.com/watch?v=szelbsBXxfs {% endyoutube %}