Middleware stă între dispatching unei acțiuni și ajungerea acțiunii la reducer, permițându-ți să interceptezi acțiuni pentru a gestiona efecte secundare (apeluri API asincrone, logging) — pe care reducers nu le pot face pentru că trebuie să rămână pure. Thunk-urile sunt cel mai frecvent middleware, permițând logica asincronă.
Unde se potrivește middleware
dispatch(action) → [ middleware 1 → middleware 2 → ... ] → reducer → store
(can inspect, modify, delay, or stop actions; do side effects)
