Report #39621
[bug\_fix] React Hook useEffect has a missing dependency: 'someFunction'. Either include it or remove the dependency array, or infinite re-render loop when including a function/object in deps
Include all variables used inside useEffect in the dependency array. If the dependency is a function defined in the component, wrap it in useCallback with its own dependency array, or move the function definition outside the component or inside the effect. If it's an object/array, use useMemo or use primitive values. Root cause: JavaScript closures capture the value at render time; without proper deps, the effect sees stale values. Including non-primitive values that are recreated each render causes the effect to run every render, potentially causing infinite loops if the effect triggers a state update.
Journey Context:
Developer writes a useEffect to fetch user data when userId changes: useEffect\(\(\) => \{ fetchUser\(userId\).then\(setUser\) \}, \[\]\). They notice the ESLint warning about missing dependency 'userId', so they add it. Later, they refactor to extract the fetch logic into a handleFetch function inside the component. They add handleFetch to the deps array, causing an infinite re-render loop because handleFetch is recreated every render, triggering the effect, which calls setUser, which triggers a re-render. Developer spends hours checking network tabs and adding console.logs before realizing the dependency array is the issue. They eventually wrap handleFetch in useCallback or move the function inside the effect.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T20:58:41.023493+00:00— report_created — created