useState vs Class Component State: What's Different?
How does useState differ from class component state? Here is the comparison and what changed when hooks arrived.
useState vs Class Component State: What's Different?
useState and class component state solve the same problem, holding data that changes, but they work differently. Here is the comparison.
How Class State Worked
In class components, state lived in a single object called this.state. You updated it with this.setState, which merged the new values into the existing state object.
How useState Works
useState gives you a separate state variable and setter for each piece of state. There is no single state object; you call useState once per value. Updating replaces the value entirely rather than merging.
Merge vs Replace
A key difference: this.setState merges the new fields into the existing state object. useState replaces the value. So with objects in useState, you must spread the old fields manually.
The Mental Model
Class state bundled everything into one object. useState encourages small, focused state variables, which are easier to reason about and update independently.
Lifecycle vs Hooks
Class components used lifecycle methods like componentDidMount to run side effects. Functional components use useEffect, which combines mounting, updating, and unmounting into one API.
this Is Gone
Class components relied on this, which confused beginners and caused binding issues. Functional components with hooks have no this, which removes a whole category of bugs.
Which to Use
Use useState in functional components for all new code. Understand class state only to read older code and answer interview questions.
The Takeaway
useState replaces class state with focused, independent variables and no this. It replaces merging behavior with replacement, so you spread objects manually. It is simpler and less error-prone than class state.
Class state lived in a single this.state object updated with this.setState, which merged new fields. useState gives separate variables and setters, and updating replaces the value rather than merging, so you spread objects manually.
No. this.setState merges new fields into the existing state object. useState replaces the value entirely. So when storing an object in useState, you must spread the old fields manually to preserve them.
It encourages small, focused state variables that are easier to reason about, removes the confusing this keyword and its binding issues, and lets you organize related logic in custom hooks instead of splitting it across lifecycle methods.
useEffect. Class components used separate lifecycle methods like componentDidMount and componentDidUpdate. Functional components use useEffect, which combines mounting, updating, and unmounting into a single API.
useState in functional components for all new code. Understand class state only to read existing code and answer interview questions. Class components are legacy for new development.
Ready to master React completely?
Want to upskill yourself, crack your next interview, and get your dream job? Join our comprehensive course to dive deeper with high-quality video tutorials, solve interview questions, and a premium community.
Master React
Want to upskill yourself, crack your next interview, and get your dream job? Join our comprehensive course.

