Report #94814
[bug\_fix] useEffect infinite loop from object/array dependency reference
Memoize the object/array with useMemo, or use a primitive dependency \(string/number\) derived from the object, or define the constant outside the component. Root cause: React's dependency checking uses Object.is\(\) which compares by reference for objects; a new literal \{a: 1\} is created each render, triggering the effect infinitely.
Journey Context:
Developer writes: const filters = \{ status: 'active', type: 'blog' \}; useEffect\(\(\) => \{ fetchPosts\(filters\); \}, \[filters\]\); Page freezes with "Maximum update depth exceeded" error. Developer checks deps array - looks correct, filters is the same value, right? Realizes JavaScript creates a new object reference every time the component renders. The effect updates state, causing re-render, creating new filters object, triggering effect again. Tries JSON.stringify\(filters\) as dep which works but is brittle. Properly implements useMemo: const filters = useMemo\(\(\) => \(\{ status, type \}\), \[status, type\]\); Now reference is stable. Or better, uses primitive deps: useEffect\(..., \[status, type\]\).
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T17:43:29.359049+00:00— report_created — created