React Academy · Урок

Suspense для границ данных и кода

Сочетайте Suspense с отложенной загрузкой и будущими библиотеками данных, чтобы аккуратно отображать состояния загрузки.

Урок 4 из 413 шагов

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

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

В этом уроке Вы будете использовать React Suspense вместе с React.lazy для разделения кода и с библиотеками данных, чтобы показывать запасной интерфейс во время загрузки содержимого.

Что такое Suspense

Suspense — это компонент React, который перехватывает компоненты в своём поддереве, «приостановленные» в ожидании загрузки, и вместо них отрисовывает запасной интерфейс.
<Suspense fallback={<Spinner />}>
  <MyComponent />
</Suspense>

Suspense с React.lazy

React.lazy() создаёт компонент, загружаемый из динамического импорта. При использовании внутри Suspense запасной интерфейс отображается до загрузки пакета JavaScript.
const HeavyChart = React.lazy(() => import('./HeavyChart'));

<Suspense fallback={<p>Loading chart...</p>}>
  <HeavyChart />
</Suspense>

Несколько ленивых компонентов под одной границей

Несколько ленивых компонентов под одной границей Suspense используют один общий запасной интерфейс. React ждёт загрузки ALL компонентов, прежде чем показать содержимое. Для независимой загрузки используйте вложенные границы.

Вложенные границы Suspense

Вкладывайте границы Suspense, чтобы показывать части интерфейса по мере их загрузки, а не ждать всё целиком. Внешние границы перехватывают медленную загрузку, а внутренние обрабатывают быструю.
<Suspense fallback={<PageSkeleton />}>
  <Header />
  <Suspense fallback={<ChartSkeleton />}>
    <LazyChart />
  </Suspense>
</Suspense>

Suspense с библиотеками данных

Библиотеки вроде React Query (с параметром suspense: true) и Relay приостанавливают компоненты, ожидающие данные, так же как при ленивой загрузке. Граница Suspense предоставляет запасной интерфейс загрузки.
const { data } = useQuery({ queryKey: ['users'], queryFn: fetchUsers,
  suspense: true }); // component suspends until data is ready
// No loading check needed — data is always available here

Хук use() в React 19

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

function Profile({ userPromise }) {
  const user = use(userPromise); // suspends until resolved
  return <p>{user.name}</p>;
}

SuspenseList для упорядоченного раскрытия

React.SuspenseList (экспериментальная возможность) координирует несколько границ Suspense, чтобы они появлялись в определённом порядке — сверху вниз, одновременно и т. д., — предотвращая хаотичное появление элементов интерфейса.

Suspense не перехватывает ошибки

Suspense обрабатывает только состояния загрузки. Он не перехватывает ошибки неудачных запросов. Объединяйте Suspense с границей ошибок, чтобы обрабатывать и состояния загрузки, и состояния ошибок.
<ErrorBoundary fallback={<Error />}>
  <Suspense fallback={<Spinner />}>
    <DataComponent />
  </Suspense>
</ErrorBoundary>

Экраны-скелеты как запасной интерфейс

Вместо индикаторов используйте экраны-скелеты как запасной интерфейс Suspense. Экраны-скелеты — это макеты-заполнители, повторяющие форму содержимого и уменьшающие сдвиг макета при его появлении.

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

Что показывается пользователям, пока загружается пакет компонента React.lazy()?

Повторение

Suspense оборачивает загружаемые компоненты и показывает запасной интерфейс. Используйте React.lazy для разделения кода, режимы Suspense библиотек данных для загрузки данных, а также вкладывайте границы для независимого последовательного раскрытия содержимого. Для полной обработки ошибок сочетайте их с границей ошибок.

Курс завершён

Поздравляем! Вы завершили **Асинхронные паттерны в React: промисы и конкурентность**. Теперь Вы умеете обрабатывать состояния гонки, использовать useTransition и useDeferredValue для создания отзывчивых интерфейсов и применять Suspense для границ загрузки.
Можно начать бесплатно

Изучай React с ИИ-репетитором — бесплатно

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

Курсы
88
Уроки
324

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

Урок «Suspense для границ данных и кода» бесплатный?

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

Чему я научусь в уроке «Suspense для границ данных и кода»?

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

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

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

Сколько времени занимает урок «Suspense для границ данных и кода»?

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

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

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

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

  1. Состояния гонки и очистка эффектов
  2. useTransition для неблокирующих обновлений интерфейса
  3. useDeferredValue для устранения дребезга ввода
  4. Suspense для границ данных и кода
← Назад к React Academy