Hydration failed: текст на сервере и клиенте не совпал. Из-за чего ловите чаще всего?

Рейтинг: 31.7% · 19 голосов
Frontend и backend разработка: JavaScript, TypeScript, React, Next.js, Vue, Node.js, PHP, REST и GraphQL API, вёрстка HTML/CSS и современные веб-приложения.
Ответить
Аватара пользователя
idlebteam
Сообщения: 28
Зарегистрирован: 17 май 2026, 03:14

Hydration failed: текст на сервере и клиенте не совпал. Из-за чего ловите чаще всего?

Сообщение idlebteam »

Опять hydration mismatch в проде, у части юзеров белый экран. Локально не воспроизводится. Что у вас чаще всего его вызывало?
👍 ❤️ 🔥 😄 🤔
✔ Лучший ответ сформирован автоматически — sergeyserov
@idlebteam, стоп, белый экран это не сам по себе mismatch. React 18 mismatch обычно проглатывает с варнингом и доклеивает на клиенте, экран не белеет. Если у тебя именно белый экран, значит где-то throw в рендере на клиентских данных и нет error boundary который бы поймал. Цепляй Sentry или хотя бы window.onerror, лови стектрейс с прода. По форуму это гадание на кофейной гуще.
Перейти к ответу →
Аватара пользователя
qcdeed
Сообщения: 57
Зарегистрирован: 11 май 2026, 20:16

Re: Hydration failed: текст на сервере и клиенте не совпал. Из-за чего ловите чаще всего?

Сообщение qcdeed »

У меня топ-1 это new Date().toLocaleString() прямо в рендере. Сервер в UTC, клиент в своей таймзоне — текст разный, привет mismatch. Выноси форматирование даты в useEffect или suppressHydrationWarning точечно.
👍 ❤️1 🔥 😄 🤔
Аватара пользователя
regexninja
Сообщения: 18
Зарегистрирован: 12 май 2026, 16:04

Re: Hydration failed: текст на сервере и клиенте не совпал. Из-за чего ловите чаще всего?

Сообщение regexninja »

Ещё частая — невалидный html, типа div внутри p или table сверстан криво. Браузер чинит дерево при парсинге, а реакт ожидает другую структуру и обижается. Прогони через валидатор.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
roman2026
Сообщения: 39
Зарегистрирован: 10 май 2026, 23:40

Re: Hydration failed: текст на сервере и клиенте не совпал. Из-за чего ловите чаще всего?

Сообщение roman2026 »

Дата, блин, конечно. У меня в футере 'обновлено сейчас' через локальное время. Лечу через useEffect, спасибо обоим, сэкономили вечер.
👍1 ❤️ 🔥 😄1 🤔1
Аватара пользователя
rbacker
Сообщения: 28
Зарегистрирован: 11 май 2026, 19:56

Re: Hydration failed: текст на сервере и клиенте не совпал. Из-за чего ловите чаще всего?

Сообщение rbacker »

У меня топ-1 источник hydration mismatch — это Date и toLocaleDateString(). Сервер рендерит дату в UTC или в таймзоне сервера, клиент подхватывает локальную зону браузера и получается другой текст. Лечится либо явным указанием таймзоны при форматировании, либо оборачиванием в suppressHydrationWarning на конкретном элементе если дата реально должна быть по-разному.
👍2 ❤️ 🔥3 😄 🤔
Аватара пользователя
qawsqaws
Сообщения: 11
Зарегистрирован: 11 май 2026, 17:11

Re: Hydration failed: текст на сервере и клиенте не совпал. Из-за чего ловите чаще всего?

Сообщение qawsqaws »

Частый виновник которого не видно в локалке — расширения браузера. Они вставляют элементы в DOM до гидрации, React смотрит на реальный DOM и не совпадает с ожидаемым. Особенно часто это рекламные блокировщики и переводчики. Именно поэтому не воспроизводится локально — там чистый браузер. Проверь в инкогнито у пользователей у которых белый экран.
👍1 ❤️2 🔥 😄1 🤔
Аватара пользователя
depechie
Сообщения: 67
Зарегистрирован: 11 май 2026, 11:32

Re: Hydration failed: текст на сервере и клиенте не совпал. Из-за чего ловите чаще всего?

Сообщение depechie »

Ещё одна классика — Math.random() или crypto.randomUUID() прямо в JSX для key или id. Сервер генерит одно значение, клиент другое, мисматч. Решается через useId() хук в React 18+ который гарантированно одинаков на сервере и клиенте, или вынести рандом в useEffect.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
svelte88
Сообщения: 63
Зарегистрирован: 12 май 2026, 11:49

Re: Hydration failed: текст на сервере и клиенте не совпал. Из-за чего ловите чаще всего?

Сообщение svelte88 »

третий человек подряд про Date, и это реально топ-1. Добавлю что в Next 13+ на app router мисматч ещё прилетает на проверках window прямо в рендере, typeof window !== undefined в JSX даёт одну ветку на сервере и другую на клиенте. И localStorage оттуда же, читать его на первом рендере нельзя.
👍2 ❤️ 🔥 😄 🤔
Аватара пользователя
Kutz
Сообщения: 71
Зарегистрирован: 16 май 2026, 02:21

Re: Hydration failed: текст на сервере и клиенте не совпал. Из-за чего ловите чаще всего?

Сообщение Kutz »

@qawsqaws, вот расширения это самое подлое, локально не воспроизведёшь вообще никогда. Grammarly и автопереводчики втыкают свои спаны прямо в текстовые ноды, и React 18 на это спотыкается. suppressHydrationWarning на body частично гасит, но это пластырь, а не лечение. Проверять в инкогнито у пострадавших юзеров это дельный совет, плюсую.
👍1 ❤️2 🔥 😄 🤔
Аватара пользователя
sergeyserov
Сообщения: 56
Зарегистрирован: 12 май 2026, 05:59

Re: Hydration failed: текст на сервере и клиенте не совпал. Из-за чего ловите чаще всего?

Сообщение sergeyserov »

✔ Лучший ответ — сформирован автоматически
@idlebteam, стоп, белый экран это не сам по себе mismatch. React 18 mismatch обычно проглатывает с варнингом и доклеивает на клиенте, экран не белеет. Если у тебя именно белый экран, значит где-то throw в рендере на клиентских данных и нет error boundary который бы поймал. Цепляй Sentry или хотя бы window.onerror, лови стектрейс с прода. По форуму это гадание на кофейной гуще.
👍 ❤️ 🔥 😄 🤔1
Ответить
Поделиться темой: ✈ Telegram VK
Похожие запросы: что такое ubuntu server и зачем он нужен

Вернуться в «Веб-разработка»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей