A Complete Guide to Using the useEffect Hook in React

Published on  

5 min read

A Complete Guide to Using the useEffect Hook in React

useEffect is one of the most important hooks in React, and it allows you to run side effects in functional components

In this guide, we'll cover everything you need to know about using the useEffect hook in your React applications, including what it is, how it works, and some best practices to keep in mind.

What is the useEffect Hook?

The useEffect hook is a function that allows you to perform side effects in your functional components. Side effects are actions that don't affect the state directly, like making an API call, subscribing to an event, or setting up a timer.

In class components, you would typically use lifecycle methods like componentDidMount, componentDidUpdate, and componentWillUnmount to perform side effects. However, in functional components, you don't have access to these lifecycle methods.

That's where the useEffect hook comes in. It lets you perform side effects in your functional components by providing a way to execute code based on changes to your component's props and state.

How Does the useEffect Hook Work?

The useEffect hook takes two arguments: a function that represents the side effect you want to perform, and an array of dependencies that trigger the side effect.

The useEffect syntax:

  () => {
    // the callback function which has the side effect you want to run
    return () => {
      /* this is an optional cleanup callback,
       which will be called before the next render */
    /* this an optional array of dependencies. 
    The useEffect callback runs only when these dependencies change*/

At first glance, it may appear overwhelming. Don't be concerned! In this tutorial, we will break it into pieces and learn about all of the practical combinations and applications of useEffect.

Here's a basic example of using useEffect:

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

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

  useEffect(() => {
    document.title = `Count: ${count}`;
  }, [count]);

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

In this example, we're using the useState hook to create a count state variable and a setCount function to update it. We're also using the useEffect hook to update the document title based on the current count value.

The useEffect function takes a callback function as its first argument. This callback function represents the side effect we want to perform. In this case, we're setting the document title based on the current count value.

The useEffect hook also takes an array of dependencies as its second argument. This array tells React when to trigger the side effect. In this example, we only want to update the document title when the count value changes, so we include count in the dependency array.

Some more usage of useEffect hook

1. No dependency passed:

useEffect(() => {
  //Runs on every render

2. An empty array:

useEffect(() => {
  //Runs only on the first render
}, []);

3. Props or state values:

useEffect(() => {
  //Runs on the first render
  //And any time any dependency value changes
}, [prop, state]);

4. Clearing the effect

useEffect(() => {
  // Perform side effect here
  return () => {
    // Clean up effect here
}, [dependency1, dependency2]);

Best Practices for Using the useEffect Hook

Here are some best practices to keep in mind when using the useEffect hook:

1. Only Call Hooks at the Top Level

You should never call hooks inside loops, conditions, or nested functions. Instead, always call them at the top level of your functional component.

2. Only Include Dependencies That are Needed

When specifying dependencies in your useEffect hook, make sure to only include the values that are needed. Including unnecessary dependencies can cause your component to re-render more often than necessary.

3. Clean Up Your Side Effects

If your side effect requires cleanup, like unsubscribing from an event or canceling a timer, make sure to include that cleanup code in your useEffect hook. This will ensure that your component is properly cleaned up and that you don't end up with any memory leaks.

4. Use Multiple useEffect Hooks

If you have multiple side effects in your component, consider using multiple useEffect hooks to keep your code organized. This will make it easier to manage your side effects and ensure that they are only triggered when necessary.


The useEffect hook is a powerful tool in React that allows you to perform side effects in your functional components. By understanding how it works and

In this article, we have discussed what the useEffect() hook is, how it works, and provided a complete guide on how to use it in your React applications. We have also explored some common use cases for this hook, such as fetching data from an API and updating the document title.

If you are new to React, we recommend checking out our beginner's guide to React, and our comprehensive guide to React hooks. Remember that the useEffect() hook is a powerful tool, but it should be used carefully to avoid performance issues and bugs. Happy coding!


About the Author

Rexposed Staff

Was this helpful?