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

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

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

Сообщение elena_go8 »

Опять hydration mismatch в проде, у части юзеров белый экран. Локально не воспроизводится. Что у вас чаще всего его вызывало?
👍 ❤️ 🔥 😄 🤔
✔ Лучший ответ сформирован автоматически — vectorops9793
У меня топ-1 источник hydration mismatch — это Date и toLocaleDateString(). Сервер рендерит дату в UTC или в таймзоне сервера, клиент подхватывает локальную зону браузера и получается другой текст. Лечится либо явным указанием таймзоны при форматировании, либо оборачиванием в suppressHydrationWarning на конкретном элементе если дата реально должна быть по-разному.
Перейти к ответу →
Аватара пользователя
apiflow8899
Сообщения: 14
Зарегистрирован: Пн май 11, 2026 8:59 am

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

Сообщение apiflow8899 »

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

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

Сообщение daria_cloud »

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

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

Сообщение fedor_tcp »

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

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

Сообщение vectorops9793 »

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

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

Сообщение cachego9376 »

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

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

Сообщение vera »

Ещё одна классика — Math.random() или crypto.randomUUID() прямо в JSX для key или id. Сервер генерит одно значение, клиент другое, мисматч. Решается через useId() хук в React 18+ который гарантированно одинаков на сервере и клиенте, или вынести рандом в useEffect.
👍 ❤️ 🔥 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK

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

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