Вопрос проверяет понимание процесса гидрации в React и типичных ошибок, связанных с несоответствием серверного и клиентского рендеринга.
Гидрация — это процесс, при котором React берет HTML, сгенерированный на сервере (SSR), и добавляет к нему интерактивность: привязывает обработчики событий, создает внутреннее состояние и подготавливает дерево компонентов. Ошибки гидрации возникают, когда серверный HTML не совпадает с тем, что React ожидает отрендерить на клиенте. Это приводит к предупреждениям в консоли и некорректному поведению интерфейса.
Math.random() или Date.now() в рендере. Сервер и клиент получают разные значения, что вызывает несоответствие.window, document или localStorage во время рендеринга. На сервере этих объектов нет, поэтому код либо падает, либо возвращает другие данные.Основной принцип — сделать рендеринг детерминированным. Все данные, которые зависят от времени, случайности или окружения, должны вычисляться только на клиенте, например, внутри useEffect. Также можно использовать специальные библиотеки, такие как @react-hook/media-query или use-sync-external-store, для безопасной работы с браузерными API.
// Плохо: случайное значение в рендере
function Component() {
return <div>{Math.random()}</div>;
}
// Хорошо: значение вычисляется после гидрации
function Component() {
const [value, setValue] = React.useState(null);
React.useEffect(() => {
setValue(Math.random());
}, []);
return <div>{value}</div>;
}Также важно проверять, что серверный и клиентский рендеринг используют одинаковые данные. Если вы передаете данные с сервера через window.__INITIAL_STATE__, убедитесь, что они сериализуются одинаково.
Гидрация — мощный инструмент для улучшения производительности и SEO, но требует аккуратности. Избегайте недетерминированных значений в рендере, используйте эффекты для клиентских операций и следите за консистентностью данных. Это позволит избежать большинства ошибок и обеспечит стабильную работу приложения.
Уровень
Рейтинг:
4
Сложность:
5
Навыки
JavaScript
React
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию