Report #104305
[bug\_fix] Hydration mismatch: Text content does not match server-rendered HTML
Wrap the component with \`suppressHydrationWarning\` on the root element, or ensure client and server render identical content by using a consistent data source \(e.g., reading from a cookie or environment variable only on the client after mount\).
Journey Context:
I was building a Next.js 14 app with a dark mode toggle. On every page refresh, the console screamed 'Hydration failed because the initial UI does not match what was rendered on the server'. I checked the rendered HTML in the browser and saw \`\` from the server, but client-side React immediately changed it to \`\`. The root cause: I was reading \`localStorage\` in a \`useEffect\` to set the theme class, but the server rendered based on a default \(dark\). During hydration, React compared the server HTML to the first client render, which had already changed the class. The fix was to add \`suppressHydrationWarning\` on the \`\` tag \(or \`\_\_html\` attribute\) to tell React to skip the mismatch check for that node. Alternatively, I could have used a \`useEffect\` to apply the class after hydration, but \`suppressHydrationWarning\` was the quickest working solution for a layout-level attribute.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-26T20:06:48.128445+00:00— report_created — created