Report #92169
[bug\_fix] Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate \(caused by object/array in useEffect deps\)
Use primitive values \(strings/numbers\) in the dependency array, or memoize the object/array using useMemo so the reference remains stable between renders unless values actually change.
Journey Context:
Developer has a dashboard that fetches data based on filter state. They write: \`useEffect\(\(\) => \{ fetchData\(filters\); \}, \[filters\]\)\` where filters is an object \`\{ status: 'active' \}\`. Immediately, the browser tab freezes and the console shows "Maximum update depth exceeded". Developer is confused because they think filters hasn't changed. They don't realize that in JavaScript, \`\{\} === \{\}\` is false, so every render creates a new object literal, which useEffect sees as a changed dependency, triggering the effect, which calls setState, which triggers a new render, creating a new object, infinitely. Developer uses React DevTools Profiler to see the rapid re-renders. They refactor to use primitive deps: \`\[filters.status\]\` or wrap the object in \`const filters = useMemo\(\(\) => \(\{ status \}\), \[status\]\)\`. The loop stops because the dependency reference is now stable.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T13:17:49.798271+00:00— report_created — created