Avoiding Common Mistakes with useEffect in ReactJS
Tags: react, reactjsdevelopment, javascript, frontend
Published: 2024-03-23 07:26:48

ReactJS is a popular JavaScript library for building user interfaces, and the useEffect hook is a critical part of its functionality. useEffect allows you to perform side effects in functional components, such as fetching data or updating the DOM. However, it can be easy to make mistakes when using useEffect, which can lead to bugs and performance issues. In this blog post, we will explore some of the common mistakes that people make when using useEffect and how to use it correctly.

## 01. Not Specifying Dependencies

One of the most common mistakes with useEffect is not specifying its dependencies. useEffect runs every time a component is rendered, so it is important to specify which values should trigger a re-render. If you don’t specify dependencies, your useEffect function could be called unnecessarily, leading to performance issues.

![](https://cdn-images-1.medium.com/max/800/0*FnYTBzANxoAk3pFs.png)

In this example, we have a counter that updates the document title every time it is clicked. However, we have not specified any dependencies in the useEffect hook. This means that the useEffect function will run every time the component is re-rendered, even if the count has not changed. To fix this, we should include the `count` variable as a dependency:

![](https://cdn-images-1.medium.com/max/800/0*ZqHlq9dC_OFlJAyQ.png)

Now, the useEffect function will only run when the count variable changes.

## 02.Using setState in useEffect Without a Dependency

Another common mistake is using setState in useEffect without a dependency. When you update the state in useEffect, it can trigger another render, which can cause an infinite loop. To avoid this issue, you should always include the state variable that you’re updating as a dependency in your useEffect hook.

![](https://cdn-images-1.medium.com/max/800/0*RsjT_Fxz29qQHKeH.png)

In this example, we are updating the count state variable in the useEffect hook without including it as a dependency. This will cause the useEffect function to run every time the component is re-rendered, leading to an infinite loop. To fix this, we should include count as a dependency:

![](https://cdn-images-1.medium.com/max/800/0*w0YPj1_dXybjzC82.png)

Now, the useEffect function will only run when the count variable changes.

But wait, didn’t you identify there is an issue with this??? Yes, this will also lead to an infinite loop when click the button. _So keep in mind to don’t use the same state as dependency and don’t update that state inside the useEffect_.

## 03. Forgetting to Clean Up

Another common mistake is not cleaning up after the useEffect hook. useEffect can return a cleanup function that runs when the component is unmounted. This is useful for cleaning up timers, event listeners, or other resources that are no longer needed. If you don’t clean up after useEffect, it can lead to memory leaks and other issues.

![](https://cdn-images-1.medium.com/max/800/0*zdDJOyEqkr5sE_TW.png)

In this example, we are using setInterval to update the count state variable every second. However, we are not cleaning up after the component is unmounted, which could lead to memory leaks. To fix this, we can return a function from the useEffect hook that clears the interval:

![](https://cdn-images-1.medium.com/max/800/0*Gvu_QRnxHDeE5S1K.png)

Now, the interval will be cleared when the component is unmounted.

In conclusion, we have discussed some of the common mistakes that people make when using useEffect in ReactJS. By specifying dependencies, including state variables as dependencies when using setState in useEffect, and cleaning up after your useEffect function, you can avoid these issues and ensure that your components are performing optimally.

Happy coding!