Using Multiple useEffect Hooks in a Single React Component

1 min read

Using Multiple useEffect Hooks in a Single React Component

React’s useEffect hook allows functional components to perform side effects such as data fetching, subscriptions, or manually changing the DOM. You can use multiple useEffect hooks in a single component to handle different concerns separately, which improves readability and separation of logic.


1. Basic Syntax of useEffect

useEffect(() => {
  // Side effect logic
}, [dependencies]);
  • Effect function: Code that runs after render
  • Dependency array: Triggers re-run when values change

2. Why Use Multiple useEffect Hooks?

Using multiple useEffect hooks allows each effect to focus on a single purpose, making the component easier to read and maintain.

Example Use Cases:

  • Fetch user data when the component mounts
  • Listen to window resize events
  • Sync local state to localStorage

3. Full Example with Multiple useEffect Hooks

import React, { useState, useEffect } from 'react';

const UserProfile = () => {
  const [user, setUser] = useState(null);
  const [windowWidth, setWindowWidth] = useState(window.innerWidth);
  const [theme, setTheme] = useState('light');

  // 1. Fetch user data on mount
  useEffect(() => {
    const fetchUser = async () => {
      const response = await fetch('https://jsonplaceholder.typicode.com/users/1');
      const data = await response.json();
      setUser(data);
    };
    fetchUser();
  }, []); // Only run on initial render

  // 2. Handle window resize
  useEffect(() => {
    const handleResize = () => {
      setWindowWidth(window.innerWidth);
    };
    window.addEventListener('resize', handleResize);
    return () => window.removeEventListener('resize', handleResize);
  }, []); // Only add event listener once

  // 3. Sync theme to localStorage
  useEffect(() => {
    localStorage.setItem('app-theme', theme);
  }, [theme]); // Run when theme changes

  return (
    <div>
      <h1>User Profile</h1>
      {user ? (
        <div>
          <p>Name: {user.name}</p>
          <p>Email: {user.email}</p>
        </div>
      ) : (
        <p>Loading...</p>
      )}

      <p>Window Width: {windowWidth}px</p>

      <button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>
        Toggle Theme
      </button>
    </div>
  );
};

export default UserProfile;

4. Key Takeaways

  • You can call useEffect multiple times in one component.
  • Each useEffect should be used for a separate concern.
  • Cleanup functions help prevent memory leaks.
  • Keep your dependencies accurate to avoid unnecessary re-renders or bugs.

Using multiple useEffect hooks provides a clean and structured way to manage side effects in modern React apps.

🤞 Never miss a story from us, get weekly updates to your inbox!

Leave a Reply

Your email address will not be published. Required fields are marked *