React
useEffect
JavaScript
web development
frontend development
hooks
programming tutorials

How to Use useEffect in React

Deepak Tewatia
September 2, 2025
3 min read

Understanding useEffect in React

The useEffect hook in React is a powerful tool that helps you manage side effects in your components. Side effects can be things like fetching data, setting up subscriptions, or directly changing the DOM. This guide will break down how to use useEffect effectively to enhance your React applications.

What is a Side Effect?

A side effect is anything that affects something outside the scope of the current function. In a React app, this often involves data fetching, timers, or subscriptions. Side effects run after the component has rendered, which helps keep the main rendering process quick and efficient.

How to Use useEffect

Let’s look at the syntax for using useEffect. Here’s a basic example:

import React, { useEffect } from 'react';

function MyComponent() {
    useEffect(() => {
        // Your side effect logic here
    }, []); // Empty array means it runs once after the first render

    return <div>My Component</div>;
}

In this code, the side effect inside useEffect runs after the first render of the component. The empty array as the second argument tells React to run this effect only one time.

Common Use Cases for useEffect

There are several common scenarios where you would want to use useEffect:

  • Fetching Data: You can fetch data from an API when the component mounts.
  • Setting Up Subscriptions: You can listen to events or subscriptions, like WebSocket updates.
  • Updating the DOM: You can use it to perform DOM manipulations that React doesn't automatically handle.

Fetching Data with useEffect

Let’s see how to fetch data from an API using useEffect:

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

function DataFetchingComponent() {
    const [data, setData] = useState([]);
    const [loading, setLoading] = useState(true);

    useEffect(() => {
        fetch('https://api.example.com/data')
            .then(response => response.json())
            .then(data => {
                setData(data);
                setLoading(false);
            });
    }, []); // Runs once on mount

    if (loading) {
        return <p>Loading...</p>;
    }

    return <ul>
        {data.map(item => <li key={item.id}>{item.name}</li>)}
    </ul> ;
}

In this example, useEffect runs a fetch request when the component mounts and updates the state with the fetched data.

Cleaning Up with useEffect

Sometimes you need to clean up after your side effects. This is important for avoiding memory leaks and ensuring your app runs smoothly. To do this, return a cleanup function from the effect:

useEffect(() => {
    const subscription = someAPI.subscribe();

    return () => {
        subscription.unsubscribe(); // Cleanup code
    };
}, []);

This cleanup function will run when the component unmounts or before the effect runs again. It’s a good practice to clean up any subscriptions or listeners you’ve set up.

Dependencies in useEffect

The second argument of useEffect is an array of dependencies. This tells React when to re-run the effect. If you leave it empty, it runs only once. If you add variables to this array, the effect will run again whenever those variables change. Here’s how it looks:

useEffect(() => {
    // Side effect logic
}, [variable1, variable2]);

In this case, the effect will run after the initial render and any time variable1 or variable2 change.

Conclusion

The useEffect hook is essential for managing side effects in your React components. It helps keep your components organized and efficient. By understanding how and when to use it, you can create more powerful and responsive web applications. So, give it a try in your next React project!

For more details, check the official React documentation on useEffect.

Comments

Y
You
Commenting
0/2000
Loading comments…