- you need to have side effects
- you need to read from store to decide what to do
- you need to dispatch more than one action
- action produced by action creator needs to contain all the data reducer can need to shape the components state
- should not have any side effects
- should not read global application state
- should not manipulate data structures passed with the action, it should only pick the right data and merge it into state
I sometimes use a middleware when I need to dispatch more than one action.