Dependency array — controls when effect runs.
1// Runs on every render (no deps)2useEffect(() => { console.log("rendered"); });34// Runs once on mount (empty deps)5useEffect(() => { initApp(); }, []);67// Runs when userId changes8useEffect(() => { fetchUser(userId); }, [userId]);
Rules:
Common mistakes: Missing dependencies, object/array dependencies (new reference each render), functions created in render.
Fix: Use useCallback for functions, useMemo for objects.