Report #49513
[bug\_fix] React Hook useEffect has a missing dependency causing stale closure
Add the missing variable to the useEffect dependency array, or use a functional state update to avoid needing the dependency. If it causes an infinite loop, wrap the dependency in useMemo or useRef. Root cause: JavaScript closures capture the value at render time; omitting a dependency means the effect sees the value from the render when the effect was last re-created \(stale data\).
Journey Context:
Developer writes useEffect to log user.name when userId changes. Puts \[userId\] in deps but references user.name inside. User updates their name in a form. Effect still logs old name because closure captured initial user object. Developer adds user to deps array, but now effect runs on every user change \(desired\). However, if effect updates user state inside, causes infinite loop. Developer realizes need to use functional update setUser\(prev => ...\) inside effect to avoid depending on the current user state, or uses useRef to track previous values without triggering effect. Learns exhaustive-deps ESLint rule is not a suggestion but a requirement for correctness.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T13:35:25.371512+00:00— report_created — created