Серверные компоненты
Вопрос
Расскажи, что такое React Server Components, какие у них ограничения и что они дают.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Серверный компонент выполняется только на сервере или при сборке, его код не уходит в бандл
Может быть async и читать данные напрямую (БД, файлы, секреты)
Нельзя использовать состояние, эффекты, обработчики и браузерные API
`'use client'` задаёт границу; клиентский модуль и его импорты идут в бандл
Пропсы через границу сериализуемые: данные, JSX, промисы, серверные функции; обычные функции нельзя
RSC не равно SSR: SSR даёт первый HTML и гидрирует, RSC вообще не гидрируются
Что могут спросить следом
- Как вставить клиентский компонент внутрь серверного и наоборот?
- Что такое серверные функции и как они связаны с формами?
- Как RSC влияют на размер бандла и время до интерактивности?
Разбор
Серверный компонент это компонент, который выполняется только на сервере или на этапе сборки. Его код и зависимости не попадают в клиентский бандл, клиент получает только результат рендера в специальном формате. Поэтому тяжёлую библиотеку для разбора markdown можно использовать на сервере бесплатно для пользователя.
Серверный компонент может быть асинхронным и читать данные прямо из базы или API с секретами, без отдельного эндпоинта. Ограничения: нет useState, useEffect, обработчиков и доступа к window.
Интерактивные части выносятся в клиентские компоненты с директивой 'use client', это граница: модуль и всё, что он импортирует, идёт в бандл. Серверный компонент может рендерить клиентский и передавать ему сериализуемые пропсы. Функцию-обработчик передать нельзя, можно только серверную функцию с 'use server'. Клиентский компонент не может импортировать серверный, но может получить его как children.
Важно не путать с SSR. SSR рендерит HTML для первого показа, а потом тот же код гидрируется. Серверные компоненты не гидрируются вовсе. В Next.js App Router используются оба механизма вместе.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «React 18-19: Suspense, transitions, RSC»
- Автоматический батчинг
- useDeferredValue и debounce
- Что делает React Compiler
- Функция из серверного компонента в клиентский
- RSC и SSR
- Что запускает Suspense
- Transition для значения поля
- use в условии