intermediate
Server Components
Рендерите компоненты на сервере, держите секреты и тяжёлые зависимости вне client и сериализуйте только поддерживаемые значения.
Server Components рендерятся на сервере и отправляют компактный RSC payload клиенту — не полное интерактивное дерево. Они могут await async data, читать секреты и импортировать server-only модули без отправки кода в браузер.
Дочерние элементы — Server или Client Components; client children получают только serializable props.
// Server Component — без 'use client'
import { db } from '@/lib/db';
export default async function ProductList() {
const items = await db.product.findMany();
return <ul>{items.map((p) => <li key={p.id}>{p.name}</li>)}</ul>;
}
На интервью: влияние на размер bundle, async components и композиция с client islands.
Типовые ошибки: `use client` в корне, hooks в server components, non-serializable props клиентам.
Компромисс: меньший client bundle против отсутствия browser API в server tree.
Чеклист:
- Async fetch прямо в server components.
- Интерактивные листья — client children.
- Не импортируйте client-only hooks на сервере.
- Аудит serialized props на границах.