AiTechWorlds
AiTechWorlds
University learning companion
Web Development Bootcamp 2026 · Hooks: useState & useEffect
A feature looks correct on a developer’s large monitor but fails on a slow connection and a small screen. Use this topic to inspect structure, state, loading/error behaviour, accessibility and the user journey—not just the happy path.
Use this course-level map to place “Hooks: useState & useEffect” in the larger system. It complements—not replaces—a topic-specific worked diagram.
Hooks are functions that let you use React features in function components. useState manages local state; useEffect handles side effects like data fetching, subscriptions, and DOM interactions.
import { useState } from "react";
// Basic counter
const [count, setCount] = useState(0);
// Object state
const [user, setUser] = useState({ name: "", email: "" });
// Array state
const [items, setItems] = useState([]);
// Boolean toggle
const [isOpen, setIsOpen] = useState(false);
const toggle = () => setIsOpen(prev => !prev);
// Lazy initialization (expensive initial value computed once)
const [data, setData] = useState(() => JSON.parse(localStorage.getItem("data") ?? "[]"));useEffect runs after render. Use it for:
import { useState, useEffect } from "react";
function UserProfile({ userId }) {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
// This runs after every render where userId changed
let cancelled = false; // prevent race conditions
setLoading(true);
setError(null);
fetch(`/api/users/${userId}`)
.then(r => r.json())
.then(data => {
if (!cancelled) {
setUser(data);
setLoading(false);
}
})
.catch(err => {
if (!cancelled) {
setError(err.message);
setLoading(false);
}
});
// Cleanup function — runs before next effect or unmount
return () => { cancelled = true; };
}, [userId]); // dependency array — re-run when userId changes
if (loading) return <p>Loading...</p>;
if (error) return <p>Error: {error}</p>;
if (!user) return null;
return <div>{user.name}</div>;
}// Run on every render (usually wrong)
useEffect(() => {
document.title = `${count} items`;
});
// Run once on mount
useEffect(() => {
analytics.trackPageView();
}, []);
// Run when specific values change
useEffect(() => {
fetchUsers(filters);
}, [filters]); // re-fetch when filters change
// Run when multiple values change
useEffect(() => {
updateChart(data, options);
}, [data, options]);useEffect(() => {
document.title = `${count} notifications | MyApp`;
return () => { document.title = "MyApp"; };
}, [count]);useEffect(() => {
function handleResize() {
setWindowSize({ width: window.innerWidth, height: window.innerHeight });
}
window.addEventListener("resize", handleResize);
handleResize(); // call immediately
return () => window.removeEventListener("resize", handleResize);
}, []); // only mount/unmountfunction SearchComponent() {
const [query, setQuery] = useState("");
const [results, setResults] = useState([]);
useEffect(() => {
if (!query.trim()) { setResults([]); return; }
const timer = setTimeout(async () => {
const data = await fetch(`/api/search?q=${query}`).then(r => r.json());
setResults(data);
}, 300);
return () => clearTimeout(timer); // cancel on new keystroke
}, [query]);
return (
<div>
<input value={query} onChange={e => setQuery(e.target.value)} />
<ul>{results.map(r => <li key={r.id}>{r.title}</li>)}</ul>
</div>
);
}// ❌ Wrong
function Component({ condition }) {
if (condition) {
const [state, setState] = useState(0); // conditional hook — never do this!
}
}
// ✅ Correct
function Component({ condition }) {
const [state, setState] = useState(0); // always called
if (!condition) return null;
return <div>{state}</div>;
}Next lesson: Lists, Keys & Conditional Rendering rendering dynamic data in React.
University learning companion
Web Development Bootcamp 2026 · Hooks: useState & useEffect
Complete the steps without looking at the answer first; record evidence rather than only a final result.
These are primary or established learning references for this subject. Check the relevant chapter or specification for the exact topic and version.
Get this course's notes on Telegram!
Free cheat sheets, summaries & practice exercises