React Server Components (RSC) фундаментально змінили спосіб створення React-додатків. Переміщуючи логіку рендерингу на сервер, ми можемо значно зменшити JavaScript-бандл, що надсилається клієнту, що призводить до швидшого завантаження та кращого досвіду користувачів. У цій статті ми розглянемо просунуті патерни та найкращі практики використання RSC у 2026 році.
Що таке Server Components?
Традиційно React-компоненти рендерились повністю на клієнті (CSR) або попередньо рендерились на сервері як HTML (SSR) і потім гідратувались на клієнті. Server Components дозволяють рендерити компоненти виключно на сервері. Їхній код ніколи не надсилається до браузера.
Переваги
- Нульовий розмір бандлу: Залежності, що використовуються в Server Components, залишаються на сервері.
- Прямий доступ до бекенду: Можна запитувати базу даних безпосередньо в компоненті.
- Автоматичне розділення коду: Client components, імпортовані на стороні сервера, автоматично розділяються.
Патерн Отримання Даних
З RSC ви можете зробити компоненти async і отримувати дані безпосередньо.
// app/users/page.tsx import { db } from '@/lib/db'; export default async function UsersPage() { const users = await db.user.findMany(); return ( <main> <h1>Users</h1> <ul> {users.map((user) => ( <li key={user.id}>{user.name}</li> ))} </ul> </main> ); }
Suspense для Стрімінгу
import { Suspense } from 'react'; import UserList from './UserList'; import LoadingSkeleton from './LoadingSkeleton'; export default function Page() { return ( <section> <h1>My Users</h1> <Suspense fallback={<LoadingSkeleton />}> <UserList /> </Suspense> </section> ); }
Поєднання Server та Client Components
Правило: Server Components можуть імпортувати Client Components. Client Components не можуть безпосередньо імпортувати Server Components. Однак ви можете передати Server Component як children до Client Component.
Патерн "Children"
// ClientComponent.tsx 'use client'; import { useState } from 'react'; export default function ClientWrapper({ children }) { const [count, setCount] = useState(0); return ( <div onClick={() => setCount((c) => c + 1)}> Count: {count} {children} {/* This can be a Server Component! */} </div> ); }
// ServerPage.tsx import ClientWrapper from './ClientWrapper'; import ServerContent from './ServerContent'; export default function Page() { return ( <ClientWrapper> <ServerContent /> {/* This works perfectly */} </ClientWrapper> ); }
Типові Пастки
- Використання Context в Server Components: Context - це клієнтська концепція.
- Додавання Event Handlers: Не можна додати
onClickабоonChangeдо Server Component.
Висновок
React Server Components - це не просто функція; це зміна парадигми. Розуміючи межу між сервером і клієнтом, ви можете будувати додатки, які є одночасно високоінтерактивними та неймовірно швидкими.