In React, a class component is one of the two main ways to write components — the other being function components. A class component is built using ES6 JavaScript classes and is used when you need advanced features like state management or lifecycle methods.
Before React Hooks were introduced in 2019, class components were the main way to build powerful React apps. Even today, they are still used and important to understand.
What is a React Component?
React is all about components – small, reusable pieces that make up your UI. A React component can be:
- A function (called a functional component)
- A class (called a class component)
Here’s what a simple class component looks like:
import React, { Component } from 'react';
class Welcome extends Component {
render() {
return <h1>Hello, {this.props.name}!</h1>;
}
}
Basic Structure of a React Class
Let’s break it down:
class Welcome extends Component {
render() {
return <h1>Hello!</h1>;
}
}
class Welcome
– You define the class with a name (must start with a capital letter).extends Component
– This means the class inherits fromReact.Component
, giving it all React’s features.render()
– Every class component must have arender
method. It returns JSX (React’s HTML-like syntax) to display UI.
Props in Class Components
Just like function components, class components use props (short for properties) to receive data.
class Welcome extends Component {
render() {
return <h1>Welcome, {this.props.name}!</h1>;
}
}
Here, this.props.name
is how you access the prop value passed to the component.
Using State in Class Components
Unlike function components (before hooks), class components have a built-in way to manage state — a special object that holds dynamic data.
Example:
class Counter extends Component {
constructor(props) {
super(props);
this.state = {
count: 0
};
}
render() {
return <h2>Count: {this.state.count}</h2>;
}
}
constructor
– Special method to initialize the component.this.state
– Where we define local data.super(props)
– Required when usingconstructor
to makethis.props
available.
Changing State with setState()
You should never update state
directly. Always use setState()
to ensure React knows about the change and re-renders the component.
this.setState({ count: this.state.count + 1 });
Full Example with Button:
class Counter extends Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
increment = () => {
this.setState({ count: this.state.count + 1 });
}
render() {
return (
<div>
<h2>Count: {this.state.count}</h2>
<button onClick={this.increment}>Increase</button>
</div>
);
}
}
Lifecycle Methods
Class components also have access to lifecycle methods, which let you run code at specific times during a component’s life (like when it mounts or updates).
Some common ones:
componentDidMount()
– Runs after the component is inserted into the DOM.componentDidUpdate()
– Runs after a component updates.componentWillUnmount()
– Runs before the component is removed.
Example:
class Timer extends Component {
componentDidMount() {
console.log('Component mounted');
}
componentWillUnmount() {
console.log('Component will be removed');
}
render() {
return <h1>Timer Running</h1>;
}
}
When to Use Class Components
Use a class component if:
- You need to manage state
- You want to use lifecycle methods
- You’re working with an older codebase
However, most modern React code uses function components with hooks, which are shorter and easier to manage.
Class vs Function Components (Quick Comparison)
Feature | Class Component | Function Component + Hooks |
---|---|---|
Syntax | Uses ES6 class | Uses plain JavaScript function |
State | Uses this.state & setState() | Uses useState() hook |
Lifecycle Methods | Has built-in lifecycle methods | Uses useEffect() hook |
Code Length | More verbose | Shorter, cleaner |
Final Thoughts
React class components are an important part of React’s history and still show up in many codebases. They give you full control over your component’s state and lifecycle.
But with the introduction of React Hooks, function components have become the modern standard for building React apps.
Still, learning class components helps you understand React more deeply and prepares you to work with any kind of React project.
Example Recap
Here’s a small working example of a class component:
import React, { Component } from 'react';
class Hello extends Component {
render() {
return <h1>Hello, {this.props.name}!</h1>;
}
}
export default Hello;