Этап 4 из 12 · ≈ 4 ч

Suspense и ленивая загрузка

Основа с Middle

Разделение кода по компонентам и показ заглушки, пока что-то загружается.

const Reports = lazy(() => import("./Reports"));

<Suspense fallback={<Spinner />}>
  <Reports />
</Suspense>

lazy загружает код компонента по требованию отдельным файлом, а Suspense показывает заглушку, пока код или данные не готовы.

Что важно знать

  • Ленивая загрузка по маршрутам и для тяжёлых редко используемых частей (редакторы, графики) уменьшает первый бандл.
  • Suspense работает и с данными — в библиотеках, которые его поддерживают (TanStack Query, React Router, Next.js), и с хуком use для промисов.
  • Вложенные границы Suspense дают постепенное появление страницы вместо одного большого спиннера.
  • При SSR Suspense позволяет отправлять HTML потоком: быстрые части приходят сразу, медленные — по готовности.

Критерии освоения

Middle ≈ 4 ч

  • Разделяет код по маршрутам через lazy и Suspense
  • Строит постепенное появление страницы вложенными границами Suspense

Практика. Перевести маршруты приложения на lazy с заглушками и измерить уменьшение начального бандла.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Как разделить код по маршрутам через lazy и Suspense?Middle

lazy(() => import("./Page")) превращает компонент в отдельный чанк, который загрузится при первом показе. Пока он грузится, ближайшая &lt;Suspense fallback&gt; показывает запасной интерфейс. Делить код логично по маршрутам и тяжёлым редко нужным частям…

Полный разбор
Что такое разделение кода (code splitting) и ленивая загрузка?Middle

Вместо одного большого бандла код делят на части, которые грузятся по необходимости: по маршрутам (страница настроек не нужна на главной), по тяжёлым виджетам (редактор, графики, карта). Механизм — динамический import(), сборщик выделяет модуль в отдельный…

Полный разбор
Что такое границы ошибок в React и что они не ловят?Middle

Граница ошибок перехватывает исключения, брошенные при рендере дочерних компонентов, и показывает запасной интерфейс вместо белого экрана. Ставят на уровне страниц и виджетов, чтобы ошибка в одном блоке не роняла всё; в componentDidCatch или onError…

Полный разбор
Как сделать интерфейс отзывчивым при тяжёлых обновлениях — useTransition и виртуализация?Middle

useTransition помечает обновление как несрочное: ввод в поле применяется сразу, а тяжёлая перерисовка результатов идёт в фоне и может прерываться; isPending показывает индикатор. useDeferredValue — то же для значения, пришедшего извне. Виртуализация (TanStack…

Полный разбор

Документация

← Вся карта «React»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования