For comparisons between side effect approaches, see What is the right way to do asynchronous operations in Redux?.
Widely Used Tools
The simplest possible side effects approach: dispatch functions instead of objects, which then get access to
getState. (Variations on the concept listed on the Middleware page.)
Generator-based side effects approach. Create "sagas", which act like background threads or daemons that can listen for actions and dispatch objects describing side effects.
Sequence your effects naturally and purely by returning them from your reducers. Also returns descriptive objects, which are executed later.
RxJS 5-based middleware for Redux. Compose and cancel async actions and more.
Redux middleware for organizing business logic and action side effects.