A Beginner’s Guide to Stateful vs Stateless Components in React



This content originally appeared on DEV Community and was authored by MD Mushfiqur Rahman

In React, components are the building blocks of your UI. One key concept that every developer should understand early on is the difference between stateful and stateless components. This distinction plays a big role in how your application behaves and how maintainable your code is.

📌 What Is a Stateful Component?

A stateful component is a component that manages its own local state using hooks like useState or useReducer.

Key Characteristics:

  • Holds and updates state internally.
  • Reacts to user interactions or lifecycle events.
  • Re-renders when the state changes.

Example:

import React, { useState } from "react";

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
}

This Counter component tracks and updates a count. It’s stateful because it uses useState.

What Is a Stateless Component?

A stateless component is a pure function. It receives data (props) and returns UI based on those props. It doesn’t manage any state or side effects internally.

Key Characteristics:

  • Has no local state.
  • Pure function: same input always gives the same output.
  • Used for UI rendering only.

Example:

function Greeting({ name }) {
  return <h1>Hello, {name}!</h1>;
}

This Greeting component simply displays the name it receives. No internal logic — just UI. It’s stateless.

Why Separate State from UI?

Separating stateful logic from presentation improves:

  • Code reusability: Stateless components are easier to reuse.
  • Testability: Pure functions are simpler to test.
  • Readability: Clearer separation of concerns.

A common practice is to extract state management and side effects (like data fetching) into custom hooks or container components and keep UI components as stateless as possible.

Summary Table

Feature Stateful Component Stateless Component
Holds local state ✅ Yes ❌ No
Triggers re-renders ✅ When state changes ✅ When props change
Reusability 🟡 Less reusable (tied to logic) ✅ More reusable
Testability 🟡 Slightly more complex ✅ Easy to test (pure)

📚 For Further Reading


This content originally appeared on DEV Community and was authored by MD Mushfiqur Rahman