How does useReducer differ from useState?

useState useReducer
Handles state with a single value Handles state with more complex logic and multiple values
Simple to use, suitable for basic state needs More complex, suitable for managing complex state logic
Simple state updates, like toggles or counters Managing state with complex transitions and logic
Directly updates state with a new value Updates state based on dispatched actions and logic
Not used Requires a reducer function to determine state changes
Logic is dispersed where state is used Logic is centralized within the reducer function