0Pricing
React Academy · Урок

Хук use() для асинхронных ресурсов

Читайте промисы и контекст во время рендеринга с помощью хука use() в React 19.

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

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

В этом уроке Вы научитесь использовать хук use() из React 19 для чтения промисов и значений контекста непосредственно внутри функции отрисовки, что упрощает доступ к асинхронным данным.

Что такое use()

use() — это хук React 19, который синхронно читает ресурс — промис или контекст — внутри функции отрисовки. Если промис ещё ожидает выполнения, компонент приостанавливает работу, а ближайшая граница Suspense показывает резервный вариант.
import { use } from 'react';

function UserProfile({ userPromise }) {
  const user = use(userPromise); // suspends if pending
  return <h1>{user.name}</h1>;
}

Передача промисов через свойства

Распространённый шаблон в React 19: серверный компонент создаёт промис (например, запрос к базе данных), передаёт его клиентскому компоненту, а клиентский компонент читает его с помощью use(). Граница Suspense может находиться в любом месте выше.
// Server Component
export default function Page() {
  const userPromise = fetchUser(1); // NOT awaited
  return (
    <Suspense fallback={<Spinner />}>
      <Profile userPromise={userPromise} />
    </Suspense>
  );
}

// Client Component
'use client';
export function Profile({ userPromise }) {
  const user = use(userPromise);
  return <p>{user.name}</p>;
}

use() и useEffect для работы с данными

Получение данных с помощью useEffect требует вручную управлять состояниями загрузки и ошибки. use() вместе с Suspense устраняет весь этот шаблонный код: тело компонента просто читает данные так, будто они синхронны.

use() для контекста

use() также может читать значения контекста, как и useContext. Разница в том, что use() можно вызывать условно — внутри условий и циклов, — в отличие от useContext, который подчиняется Правилам хуков.
import { use } from 'react';
import { ThemeContext } from './ThemeContext';

function Button({ danger }) {
  if (danger) {
    const theme = use(ThemeContext); // conditional — allowed with use()!
    return <button style={{ color: theme.red }}>Delete</button>;
  }
  return <button>Click</button>;
}

Обработка ошибок с помощью ErrorBoundary

Если промис, переданный в use(), отклоняется, React выбрасывает ошибку. Оберните компонент в ErrorBoundary, чтобы перехватить её и отобразить резервный вариант.
<ErrorBoundary fallback={<Error />}>
  <Suspense fallback={<Loading />}>
    <Profile userPromise={fetchUser(id)} />
  </Suspense>
</ErrorBoundary>

use() только в клиентских компонентах

Работа use() с промисом поддерживается в клиентских компонентах. В серверных компонентах используйте async/await напрямую — на сервере нет необходимости применять use() для промисов.

Кэширование промисов

При повторной отрисовке компонент должен получить тот же объект промиса, чтобы избежать повторного запроса. Создавайте промисы за пределами компонента или в стабильном месте (на сервере, в кэше или состоянии) и передавайте их через свойства.

Потоковая передача с use()

Сочетание use() с потоковым SSR позволяет React передать HTML страницы потоком, показать резервный вариант Suspense, а затем передать отобразившееся содержимое после завершения промиса — всё в рамках одного HTTP-соединения.

React.cache() для устранения дублирования

На сервере React.cache() (или unstable_cache из Next.js) устраняет дублирование нескольких вызовов одной и той же асинхронной функции в рамках одного рендера, поэтому к базе данных обращаются только один раз, даже если несколько компонентов используют один и тот же промис.

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

Что делает клиентский компонент, когда вызывается use(promise), а промис всё ещё ожидает выполнения?

Повторение

use(promise) синхронно читает асинхронные данные во время рендера и приостанавливает его, если данные ещё ожидаются. use(context) можно использовать условно, в отличие от useContext. Всегда используйте его вместе с Suspense для отображения загрузки и с ErrorBoundary для обработки ошибок.

Далее

Следующий урок: **действия React и useActionState** — Вы определите серверные и клиентские действия и научитесь обрабатывать отправку форм с состоянием ожидания.

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

Урок «Хук use() для асинхронных ресурсов» бесплатный?

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

Чему я научусь в уроке «Хук use() для асинхронных ресурсов»?

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

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

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

Сколько времени занимает урок «Хук use() для асинхронных ресурсов»?

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

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

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

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

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