Report #66472
[bug\_fix] Maximum update depth exceeded or ESLint warning 'React Hook useEffect has a missing dependency'
Include all reactive values \(props, state, functions\) used inside \`useEffect\` in the dependency array, or use a functional update \`setState\(prev => ...\)\` if the new state depends on old state. Root cause: Stale closure over changing values, or the effect triggering itself via a state setter that changes a dependency, causing an infinite render loop.
Journey Context:
Developer writes \`useEffect\(\(\) => \{ fetchUser\(userId\); \}, \[\]\)\` but \`userId\` comes from props. ESLint warns about missing dependency. Developer ignores it. Later, they add \`setCount\(count \+ 1\)\` inside an effect that depends on \`count\`. The browser freezes with "Maximum update depth exceeded". Developer opens React DevTools Profiler and sees a loop: render -> effect -> setState -> render. They try adding \`count\` to the dependency array, but that makes it loop forever. The realization hits that they should use \`setCount\(c => c \+ 1\)\` \(functional update\) so they don't need \`count\` in deps. Or they memoize the \`fetchUser\` function with \`useCallback\` so it doesn't change on every render. The fix involves carefully auditing the dependency array and using functional updates for state that depends on previous state.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T18:03:24.874909+00:00— report_created — created