Проверяет понимание причин ошибки гидрации в Next.js и умение устранять расхождения между серверным и клиентским рендерингом.
Гидрация — это процесс, при котором React на клиенте «оживляет» HTML, уже отрендеренный сервером. Если разметка сервера и клиента отличается хотя бы на один символ, React выбрасывает ошибку Text content does not match server-rendered HTML и перерисовывает поддерево, что бьёт по производительности и SEO.
Date.now(), Math.random(), new Date() прямо в JSX.window, localStorage, navigator во время рендера.<p> внутри <p>), который браузер «чинит» по-своему.Переносите клиентские вычисления в useEffect, чтобы первый рендер совпадал с серверным, а затем состояние обновлялось.
function Clock() {
const [now, setNow] = useState(null);
useEffect(() => {
setNow(new Date().toLocaleTimeString());
const id = setInterval(() => setNow(new Date().toLocaleTimeString()), 1000);
return () => clearInterval(id);
}, []);
return <span>{now ?? '--:--:--'}</span>;
}Если компонент вообще не должен рендериться на сервере, используйте динамический импорт:
import dynamic from 'next/dynamic';
const Chart = dynamic(() => import('./Chart'), { ssr: false });Для осознанных расхождений (например, тема оформления) применяйте suppressHydrationWarning на конкретном элементе, но не как универсальное решение.
Итог: применяйте useEffect и динамический импорт для клиентских данных, а suppressHydrationWarning — только точечно, чтобы сохранить преимущества SSR и избежать лишних перерисовок.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию