React Fundamentals

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

beginner Frontend Frameworks 5 hours

Chapter 11: Component Lifecycle

Chapter 11 of 15

Chapter 11: Component Lifecycle

11.1 Lifecycle Methods

Class components have lifecycle methods that run at specific points. Function components use hooks for similar functionality.

Lifecycle Phases:

  • Mounting: Component is created and inserted into DOM
  • Updating: Component re-renders due to state/props changes
  • Unmounting: Component is removed from DOM

Class Component Lifecycle:

class MyComponent extends React.Component {
    componentDidMount() {
        // Runs after component mounts
        // Good for API calls, subscriptions
    }
    
    componentDidUpdate(prevProps, prevState) {
        // Runs after update
        // Compare prevProps/prevState with current
    }
    
    componentWillUnmount() {
        // Runs before unmounting
        // Cleanup: remove listeners, cancel requests
    }
}

11.2 useEffect Hook (Function Components)

useEffect replaces lifecycle methods in function components.

import { useEffect } from 'react';

function MyComponent() {
    useEffect(() => {
        // Runs after render (like componentDidMount + componentDidUpdate)
        console.log('Component rendered');
        
        // Cleanup function (like componentWillUnmount)
        return () => {
            console.log('Cleanup');
        };
    });
}

useEffect Dependencies:

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

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

// Run on every render (usually avoid)
useEffect(() => {
    // Code
}); // No dependency array

11.3 Common Lifecycle Patterns

Common patterns for lifecycle operations.

// Fetch data on mount
useEffect(() => {
    fetchData().then(setData);
}, []);

// Update when prop changes
useEffect(() => {
    updateData(props.id);
}, [props.id]);

// Cleanup subscriptions
useEffect(() => {
    const subscription = subscribe();
    return () => subscription.unsubscribe();
}, []);

11.4 Lifecycle Best Practices

Follow best practices for lifecycle management.

  • Use useEffect for side effects
  • Clean up subscriptions and timers
  • Specify correct dependencies
  • Avoid infinite loops
  • Use multiple useEffect hooks for different concerns