The useEffect
hook in React is essential for handling side effects in functional components. It allows you to perform operations like fetching data, listening for events, updating the DOM, and cleaning up resources.
πΉ Key Features of useEffect
1οΈβ£ Runs on every render (by default)
2οΈβ£ Runs only once on mount (with []
dependency array)
3οΈβ£ Runs when dependencies change ([dependency]
)
4οΈβ£ Cleanup function to avoid memory leaks
π Comprehensive Example Covering All Features
import { useState, useEffect } from "react";
const UseEffectDemo = () => {
const [count, setCount] = useState(0);
const [message, setMessage] = useState("Hello");
// π’ 1οΈβ£ Runs on every render (default)
useEffect(() => {
console.log("Component re-rendered!");
});
// π΅ 2οΈβ£ Runs only once on mount
useEffect(() => {
console.log("Mounted! Fetching data...");
}, []);
// π 3οΈβ£ Runs when `count` changes
useEffect(() => {
console.log(`Count changed: ${count}`);
}, [count]);
// π£ 4οΈβ£ Cleanup function for event listeners or subscriptions
useEffect(() => {
console.log("Adding event listener...");
window.addEventListener("resize", () => console.log("Window resized"));
return () => {
console.log("Cleanup: Removing event listener...");
window.removeEventListener("resize", () => console.log("Window resized"));
};
}, []);
return (
<div>
<h2>useEffect Demo</h2>
<p>Count: {count}</p>
<p>Message: {message}</p>
<button onClick={() => setCount(count + 1)}>Increment</button>
<button onClick={() => setMessage("React is awesome!")}>
Update Message
</button>
</div>
);
};
export default UseEffectDemo;
π Explanation
β
Runs on Every Render β First useEffect()
logs on each render.
β
Runs Only Once on Mount β Second useEffect()
fetches data when the component mounts.
β
Runs on Dependency Change β Third useEffect()
logs updates only when count
changes.
β
Cleanup on Unmount β Last useEffect()
adds a listener and removes it when the component unmounts.
π₯ When to Use useEffect
?
β
Fetching data (API calls
)
β
Subscribing to events (resize, scroll
)
β
Managing intervals (setTimeout, setInterval
)
β
Cleaning up resources (event listeners, subscriptions
)
Top comments (2)
Very nice content and clear. Please post more like this on react design patterns
Thanks Pushparaja... will post soon.