57. SSR и Hydration
SSR и Hydration: Как работает магия серверного рендеринга
Заголовок раздела «SSR и Hydration: Как работает магия серверного рендеринга»Server-Side Rendering (SSR) — это техника, при которой HTML-код страницы генерируется на сервере и отправляется клиенту в готовом виде. Это противоположность Client-Side Rendering (CSR), где браузер получает пустой HTML и строит интерфейс с помощью JavaScript.
1. Как работает SSR?
Заголовок раздела «1. Как работает SSR?»- Запрос: Пользователь запрашивает страницу.
- Сервер: Выполняет React-код, собирает данные (например, из API) и генерирует строку HTML.
- Ответ: Сервер отправляет готовый HTML браузеру.
- Отображение: Пользователь сразу видит контент (даже если JS еще не загрузился).
- Hydration (Гидратация): Браузер загружает JS, React “оживляет” HTML, вешая обработчики событий.
2. Зачем нужен SSR?
Заголовок раздела «2. Зачем нужен SSR?»- SEO: Поисковые роботы видят весь контент сразу, без необходимости исполнять JS.
- Performance (FCP): Пользователь видит “первую содержательную отрисовку” гораздо быстрее.
- Social Sharing: Превью ссылок в соцсетях работают корректно.
3. Hydration (Гидратация) — “Оживление” кода
Заголовок раздела «3. Hydration (Гидратация) — “Оживление” кода»Гидратация — это процесс, при котором React в браузере сопоставляет серверный HTML с клиентскими компонентами.
Критическое правило: Рендер на сервере и первый рендер на клиенте должны быть идентичными!
Если они различаются (например, вы используете window.innerWidth или new Date() внутри компонента), возникнет Hydration Mismatch Error.
Как избежать ошибок гидратации:
Заголовок раздела «Как избежать ошибок гидратации:»import { useState, useEffect } from 'react';
const MyComponent = () => { const [isClient, setIsClient] = useState(false);
useEffect(() => { // Этот код выполнится только в браузере после гидратации setIsClient(true); }, []);
return ( <div> {isClient ? 'Я в браузере!' : 'Я на сервере!'} </div> );};4. Методы в “чистом” React (без фреймворков)
Заголовок раздела «4. Методы в “чистом” React (без фреймворков)»Для реализации SSR в Node.js используются специальные методы из react-dom/server:
renderToString: Генерирует HTML (синхронно).renderToPipeableStream(React 18): Позволяет отправлять HTML по частям (Streaming), что ускоряет загрузку.
5. SSR в современных фреймворках
Заголовок раздела «5. SSR в современных фреймворках»Сегодня редко кто пишет SSR на чистом Node.js. Обычно используют:
- Next.js: Самый популярный фреймворк для SSR/SSG.
- Remix: Ориентирован на веб-стандарты и прогрессивное улучшение.
- SSR дает SEO и скорость первого отображения.
- Hydration превращает статичный HTML в интерактивное React-приложение.
- Mismatch — главная проблема SSR, решается через
useEffectили проверкуtypeof window.
Практика
Заголовок раздела «Практика»Попробуйте примеры в интерактивном редакторе: