Skip to content

Class Components

Class components were the primary way to build React components before Hooks (React 16.8). They extend React.Component, use a render() method, and support lifecycle methods.

class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
class Counter extends React.Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
componentDidMount() {
document.title = `Count: ${this.state.count}`;
}
componentDidUpdate() {
document.title = `Count: ${this.state.count}`;
}
render() {
return (
<div>
<p>{this.state.count}</p>
<button onClick={() => this.setState({ count: this.state.count + 1 })}>+</button>
</div>
);
}
}
flowchart TD
Mount[Mount] --> didMount[componentDidMount]
didMount --> Update[Update]
Update --> didUpdate[componentDidUpdate]
Update --> Unmount[Unmount]
Unmount --> willUnmount[componentWillUnmount]

Key Differences from Functional Components

Section titled “Key Differences from Functional Components”
FeatureClassFunctional + Hooks
Statethis.state + this.setStateuseState hook
EffectscomponentDidMount/Update/WillUnmountuseEffect
Contextthis.context or Context.ConsumeruseContext
Refsthis.ref or createRefuseRef
this bindingManual bind in constructorNot needed

⚠ Avoid in new code — use functional components with hooks instead. ✅ Maintain legacy codebases that use class components.

  1. What class must class components extend? A) React.Component B) React.PureComponent C) React.Hooks D) A or B → D
  2. Why avoid class components today? A) Slower B) More boilerplate C) No hooks D) All → D

📖 Class components use ES6 classes. Legacy but still maintained. Use functional components for new code.

Functional Components | Component Lifecycle