> Как в SSR составляется состояние для рендера? (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: elirox
Стек: JavaScript
> Пример ответа
В серверном рендеринге (SSR) состояние для рендера составляется на стороне сервера перед отправкой HTML клиенту. Процесс обычно включает следующие шаги:
-
Инициализация хранилища: На сервере создается экземпляр глобального хранилища (например, Redux store, MobX store или контекст React), который будет содержать все необходимые данные для рендера страницы.
-
Загрузка данных: Сервер выполняет асинхронные запросы к API или базе данных для получения данных, специфичных для текущего маршрута или компонента. Например, для страницы пользователя загружается профиль, для списка статей - массив постов.
-
Заполнение состояния: Полученные данные помещаются в хранилище. В Redux это dispatch actions, в MobX - мутация observable-свойств, в React - установка контекста или пропсов.
-
Рендер в строку: Компоненты рендерятся в HTML-строку с помощью
renderToString(React) или аналогичных методов. Хранилище при этом уже содержит полное состояние. -
Сериализация и инъекция: После рендера состояние сериализуется в JSON (например,
JSON.stringify(store.getState())) и вставляется в HTML-документ как глобальная переменная, обычно в тег<script>:HTML<script>window.__INITIAL_STATE__ = {"user": {"id": 1, "name": "John"}};</script> -
Гидратация на клиенте: При загрузке страницы клиентский JavaScript считывает
window.__INITIAL_STATE__и инициализирует локальное хранилище этим состоянием, избегая повторных запросов и обеспечивая консистентность между серверным и клиентским рендером.
Этот подход гарантирует, что пользователь видит полностью готовую страницу с данными сразу после загрузки HTML, а клиентская часть "подхватывает" состояние без лишних API-вызовов.
> Похожие задачи по frontend
Почему метод shift мутирует массив и как сделать удаление первого элемента иммутабельно в JavaScript?
В каком порядке срабатывают события при нажатии на кнопку и почему
Как отправить состояние при закрытии страницы браузера?
Как создаются переменные в JavaScript?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью