React Fundamentals

Learn React from scratch including components, JSX, props, and state basics.

beginner Frontend Frameworks 5 hours

Chapter 14: useEffect Hook

Chapter 14 of 15

Chapter 14: useEffect Hook

14.1 Basic useEffect

useEffect handles side effects in function components. It runs after render.

import { useEffect } from 'react';

function Component() {
    useEffect(() => {
        // Side effect code
        console.log('Component rendered');
    });
    
    return <div>Content</div>;
}

useEffect Syntax:

  • First argument: function with side effect
  • Second argument: dependency array (optional)
  • Runs after every render by default

Dependency Array:

// Run on every render
useEffect(() => {
    // Code
});

// Run once on mount
useEffect(() => {
    // Code
}, []);

// Run when dependency changes
useEffect(() => {
    // Code
}, [dependency]);

14.2 Cleanup

Return cleanup function from useEffect to clean up side effects.

useEffect(() => {
    const timer = setInterval(() => {
        console.log('Tick');
    }, 1000);
    
    // Cleanup function
    return () => {
        clearInterval(timer);
    };
}, []);

Common Cleanup Scenarios:

  • Clear timers/intervals
  • Cancel API requests
  • Remove event listeners
  • Close subscriptions
// Event listener cleanup
useEffect(() => {
    const handleResize = () => {
        console.log('Window resized');
    };
    
    window.addEventListener('resize', handleResize);
    
    return () => {
        window.removeEventListener('resize', handleResize);
    };
}, []);

14.3 useEffect Patterns

Common patterns for using useEffect.

// Fetch data on mount
useEffect(() => {
    fetch('/api/data')
        .then(res => res.json())
        .then(data => setData(data));
}, []);

// Update when prop changes
useEffect(() => {
    fetchUserData(userId);
}, [userId]);

// Multiple effects
useEffect(() => {
    // Effect 1
}, [dependency1]);

useEffect(() => {
    // Effect 2
}, [dependency2]);

14.4 useEffect Best Practices

Follow best practices for useEffect.

  • Always include dependencies
  • Clean up side effects
  • Use multiple effects for different concerns
  • Avoid infinite loops
  • Don't forget dependency array