Middleware se encuentra entre el envío de una acción y la acción que llega al reducer, permitiéndote interceptar acciones para manejar efectos secundarios (llamadas API asincrónicas, logging) — lo que los reducers no pueden hacer porque deben mantenerse puros. Thunks es el middleware más común, habilitando lógica asincrónica.
Dónde encaja middleware
dispatch(action) → [ middleware 1 → middleware 2 → ... ] → reducer → store
(can inspect, modify, delay, or stop actions; do side effects)
