Middleware si colloca tra il dispatch di un'azione e l'arrivo dell'azione al reducer, permettendoti di intercettare le azioni per gestire side effect (chiamate API asincrone, logging) — che i reducer non possono fare perché devono rimanere pure. Thunk sono il middleware più comune, che abilitano la logica asincrona.
Dove si colloca il middleware
dispatch(action) → [ middleware 1 → middleware 2 → ... ] → reducer → store
(can inspect, modify, delay, or stop actions; do side effects)
