Server components в контексте Radix UI представляют собой компонентный подход, который позволяет выполнять рендеринг на стороне сервера, минимизируя объём JavaScript, передаваемого в браузер. В отличие от традиционных client components, server components не содержат интерактивной логики, а лишь возвращают готовую разметку. Это существенно повышает производительность приложения и снижает нагрузку на клиентскую сторону.
Server components идеально подходят для:
Server components строятся на основе концепции реактивного рендеринга на сервере. Их ключевые особенности:
useState или useEffect, так как
эти хуки работают только на клиенте.Пример структуры:
// ServerComponent.jsx
import { Card } from "@radix-ui/react-card";
export default async function ServerComponent() {
const data = await fetch("https://api.example.com/items").then(res => res.json());
return (
<div>
{data.map(item => (
<Card key={item.id}>
<h2>{item.title}</h2>
<p>{item.description}</p>
</Card>
))}
</div>
);
}
В этом примере сервер получает данные и сразу возвращает готовые карточки. Браузеру не требуется дополнительная обработка.
Server components могут включать client components для добавления
интерактивности. Client components подключаются через директиву
"use client" в начале файла. Это важно, чтобы разграничить
зоны, где возможны события и хуки.
Пример интеграции:
// ClientButton.jsx
"use client";
import { Button } from "@radix-ui/react-button";
export default function ClientButton({ onClick }) {
return <Button onCl ick={onClick}>Нажми меня</Button>;
}
// ServerComponentWithClient.jsx
import ClientButton from "./ClientButton";
export default async function ServerComponentWithClient() {
const data = await fetch("/api/items").then(res => res.json());
return (
<div>
{data.map(item => (
<div key={item.id}>
<h2>{item.title}</h2>
<ClientButton onCl ick={() => console.log(item.id)} />
</div>
))}
</div>
);
}
Такое разделение позволяет оставлять большую часть интерфейса статической и экономить ресурсы, подключая интерактивность только там, где это действительно необходимо.
Server components в Radix UI предоставляют современный способ построения интерфейсов, позволяя разгружать клиент и оптимизировать работу приложения. Они идеально подходят для статических и полу-динамических интерфейсов, где критична производительность и минимизация объёма передаваемого кода. Грамотное сочетание server и client components обеспечивает баланс между интерактивностью и эффективностью рендеринга.