Use useState if you have:**
- A) JavaScript primitives as state
- B) simple state transitions
- C) business logic within your component
- D) different properties that don’t change in any correlated way and can be managed by multiple useState hooks
- E) state co-located to your component
- F) a small application (but the lines are blurry here)
Use useReducer if you have:
- A) JavaScript objects or arrays as state
- B) complex state transitions
- C) complicated business logic more suitable for a reducer function
- D) different properties tied together that should be managed in one state object
- E) the need to update state deep down in your component tree
- F) a medium-sized application (NB: the lines are blurry here)
- G) need for an easier time testing it
- H) need for a more predictable and maintainable state architecture