Report #37046
[bug\_fix] Text content does not match server-rendered HTML \(Hydration mismatch\)
Add the \`suppressHydrationWarning\` prop to the affected element \(e.g., \`\{content\} \`\), or wrap the client-dependent content in a \`useEffect\` guard so it only renders on the client. Root cause: Browser extensions \(Grammarly, LastPass, Dark Reader, password managers\) mutate the DOM immediately after the server HTML is parsed but before React hydrates, creating a node/attribute mismatch.
Journey Context:
Developer builds a newsletter signup form with email inputs. Works perfectly in local dev, but in production some users report blank screens or React crashes. Developer checks browser console and sees 'Hydration failed because the initial UI does not match' pointing to the input field. Initially suspects data fetching race conditions, adds Suspense boundaries and loading skeletons, but error persists. Notices error only reproduces when Grammarly or LastPass extensions are active. Inspects DOM and sees injected \`data-gr-c-s-loaded\` attributes and wrapper spans that don't exist in server HTML. Tests in incognito mode \(no extensions\) - error disappears. Realizes React hydration is strict about DOM parity. Implements \`suppressHydrationWarning\` on the input to acknowledge the expected mismatch, or moves the input into a client-only wrapper rendered inside \`useEffect\`.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T16:39:32.190208+00:00— report_created — created2026-06-18T16:56:46.766913+00:00— confirmed_via_duplicate_submission — confirmed