React Suspense — это механизм для управления асинхронными операциями и отложенным рендерингом в React-приложениях. Он позволяет компонентам "ждать" чего-либо перед рендером, показывая запасное содержимое (fallback).
import { Suspense } from 'react';
<Suspense fallback={<Loader />}>
<AsyncComponent />
</Suspense>
Самый распространенный случай использования:
import { lazy, Suspense } from 'react';
const LazyComponent = lazy(() => import('./LazyComponent'));
function App() {
return (
<Suspense fallback={<div>Загрузка...</div>}>
<LazyComponent />
</Suspense>
);
}
Как это работает:
Современный подход с React 18:
import { Suspense } from 'react';
import { fetchData } from './data';
const resource = fetchData(); // Возвращает промис
function DataComponent() {
const data = resource.read(); // "Подвешивает" компонент если данные не готовы
return <div>{data}</div>;
}
function App() {
return (
<Suspense fallback={<h1>Загружаем данные...</h1>}>
<DataComponent />
</Suspense>
);
}
Можно оборачивать несколько асинхронных компонентов:
<Suspense fallback={<Spinner />}>
<ProfileHeader />
<ProfileDetails />
<ProfileTimeline />
</Suspense>
<Suspense fallback={<BigSpinner />}>
<ProfilePage>
<Suspense fallback={<ProfileHeaderSkeleton />}>
<ProfileHeader />
</Suspense>
<Suspense fallback={<ProfileDetailsSkeleton />}>
<ProfileDetails />
</Suspense>
</ProfilePage>
</Suspense>
<ErrorBoundary>
<Suspense fallback={<Loader />}>
<AsyncContent />
</Suspense>
</ErrorBoundary>
Suspense использует механизм "подвешивания" (suspending):
React Suspense — это мощный инструмент для управления асинхронными операциями в React. Он особенно полезен для:
Используйте Suspense везде, где нужно показать промежуточное состояние во время ожидания ресурсов, сочетая его с Error Boundary для обработки ошибок.