0Pricing
React Academy · Урок

Компоненты React на сервере

Разберитесь, что такое RSC, чем они отличаются от клиентских компонентов и когда использовать каждый вариант.

«Компоненты React на сервере» — бесплатный урок React Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.

Добро пожаловать

В этом уроке Вы узнаете, что такое серверные компоненты React (RSC), чем они отличаются от клиентских компонентов и когда следует использовать каждый из этих типов.

Два мира компонентов

React 19 и маршрутизатор приложений Next.js разделяют компоненты на два мира: **серверные компоненты** (отрисовываются на сервере и не поддерживают интерактивность) и **клиентские компоненты** (отрисовываются и на сервере, и на клиенте, имеют состояние и обработчики событий).

Серверные компоненты по умолчанию

В маршрутизаторе приложений Next.js каждый компонент по умолчанию является серверным. Чтобы включить режим клиентского компонента, добавьте 'use client' в начало файла.
// Server Component (default, no directive needed)
export default async function Page() {
  const data = await fetch('/api/posts').then(r => r.json());
  return <ul>{data.map(p => <li key={p.id}>{p.title}</li>)}</ul>;
}

Клиентские компоненты

Добавьте 'use client' в начало файла, чтобы сделать его клиентским компонентом. Клиентские компоненты могут использовать useState, useEffect, обработчики событий и API браузера.
'use client';
import { useState } from 'react';

export function Counter() {
  const [n, setN] = useState(0);
  return <button onClick={() => setN(n+1)}>{n}</button>;
}

Возможности серверных компонентов

Серверные компоненты могут: ожидать результаты запросов к базе данных, читать файловую систему, обращаться к секретам окружения, импортировать крупные пакеты, предназначенные только для сервера, и отрисовываться без отправки JavaScript клиенту.
// Fetch from DB directly in the component!
import { db } from '@/lib/db';

export default async function UserList() {
  const users = await db.select().from(usersTable);
  return <ul>{users.map(u => <li key={u.id}>{u.name}</li>)}</ul>;
}

Ограничения серверных компонентов

Серверные компоненты CANNOT: использовать useState, useEffect, обработчики событий (onClick и т. д.), API браузера (window, localStorage) или контекст. Для этого требуется 'use client'.

Сочетание серверных и клиентских компонентов

Распространённый шаблон: серверный компонент получает данные и передаёт их клиентскому компоненту через свойства. Сервер обрабатывает данные, а клиент — взаимодействие.
// Server Component
export default async function Page() {
  const user = await getUser();
  return <ProfileEditor user={user} />; // client component
}

// Client Component (separate file)
'use client';
export function ProfileEditor({ user }) {
  const [name, setName] = useState(user.name);
  return <input value={name} onChange={e => setName(e.target.value)} />;
}

Правило границы клиента

После того как Вы пометите файл директивой 'use client', все импортированные им компоненты также считаются клиентскими. Граница между сервером и клиентом проходит на уровне файла.

Ноль JavaScript для серверных компонентов

Серверные компоненты отрисовываются в HTML на сервере. Их код компонентов NEVER отправляется в браузер. Это значительно уменьшает размер пакета JavaScript.

Серверные компоненты и SSR

Традиционный SSR отрисовывает всю страницу в HTML, но отправляет клиенту код всех компонентов для гидратации. Серверные компоненты вообще не отправляют свой код клиенту — только результат отрисовки.

Быстрая проверка

Какую директиву нужно добавить в файл, чтобы сделать его клиентским компонентом React в маршрутизаторе приложений Next.js?

Итоги

Серверные компоненты работают на сервере, могут обращаться к базам данных и секретам и не отправляют JS клиенту. Клиентские компоненты добавляют 'use client' и поддерживают состояние, эффекты и обработчики событий. Сочетайте их так: сервер получает данные, клиент обеспечивает взаимодействие.

Далее

Следующий урок: **Хук use() для асинхронных ресурсов** — Вы научитесь читать промисы и контекст во время отрисовки с помощью хука use() из React 19.

Часто задаваемые вопросы

Урок «Компоненты React на сервере» бесплатный?

Да — полный текст урока «Компоненты React на сервере» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.

Чему я научусь в уроке «Компоненты React на сервере»?

Разберитесь, что такое RSC, чем они отличаются от клиентских компонентов и когда использовать каждый вариант. Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать React Academy?

Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Компоненты React на сервере»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке React Academy?

Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Компоненты React на сервере
  2. Хук use() для асинхронных ресурсов
  3. Действия React и useActionState
  4. useOptimistic для мгновенной обратной связи
← Назад к React Academy