useEffect dependency arrays, cleanup, infinite loops, and stale closures
useEffect behavior depends heavily on its dependency array, and many common bugs come from missing dependencies or stale captured values.
- No dependency array means after every render
- Empty array means mount-like behavior
- Cleanup prevents leaks and duplicate subscriptions
useEffect dependency arrays, cleanup, infinite loops, and stale closures