Learn React useEffect Hook with LyzersLab - A Beginner's Guide to Side Effects in React

๐น React Hook Deep Dive: useEffect Made Simple
Our format stays strong:
- โ Core Concept
- ๐ Real Example
- ๐ Best Practices
- โ ๏ธ Pitfalls to Avoid
- ๐ค Execution Order
- ๐งช Optional Demo (CodeSandbox or Timeline)
โ 1. Concept
useEffect lets you perform side effects in function components โ like data fetching, subscriptions, DOM updates, or timers.
It runs after render, and can optionally clean up.
useEffect(() => {
// run side effect
return () => {
// optional cleanup
};
}, [dependencies]);
๐ 2. Example: Fetching Data on Mount
import React, { useEffect, useState } from 'react';
function Users() {
const [users, setUsers] = useState([]);
useEffect(() => {
fetch('https://jsonplaceholder.typicode.com/users')
.then(res => res.json())
.then(data => setUsers(data));
}, []); // empty array = run once on mount
return (
<ul>
{users.map(user => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);
}
This runs once after initial render and fetches user data.
๐ 3. Best Practices
- โ
Use multiple
useEffects for unrelated concerns - โ Always define dependencies correctly
- โ Return a cleanup function if needed (like removing event listeners)
- โ Use async functions inside the effect, not at the top level
useEffect(() => {
const load = async () => {
const res = await fetch(...);
const data = await res.json();
setData(data);
};
load();
}, []);
โ ๏ธ 4. Common Pitfalls
- โ Forgetting dependencies โ stale state or bugs
- โ Using async directly in
useEffect(it returns a promise, not a cleanup) - โ Not cleaning up subscriptions โ memory leaks
๐ค 5. Execution Order
| Step | Phase | What Happens |
|---|---|---|
| 1 | Render | Component mounts |
| 2 | Commit | DOM updates |
| 3 | Post-render | useEffect runs |
| 4 | Re-render | Runs again if deps changed |
| 5 | Unmount | Cleanup (if defined) runs |
Comments (0)
No comments yet. Be the first to comment!

