ErrorPage
Полноэкранная error-страница. Тип ошибки (errorType) задаёт заголовок, код статуса, текст и набор действий; справа — декоративная иллюстрация, скрытая на mobile.
Когда использовать
- Нужно показать пользователю системную ошибку или недоступность страницы целым экраном.
- Требуется типовой набор: заголовок с кодом статуса, поясняющий текст, кнопка действия и ссылки на главную/назад.
- Нужна точка входа в поддержку (
onSupportCenterClick).
Когда не нужен:
- Локальная ошибка внутри блока или формы:
- используйте
Alertили inline-сообщение.
- используйте
- Загрузочное/пустое состояние без ошибки — это
Skeleton/ empty-state, а не ErrorPage.
Анатомия
Error type (default FrontendError)
Главная ось — errorType. Определяет заголовок, код статуса, текст и какие действия видны:
FrontendError— непредвиденная ошибка. Кнопка «Обновить», ссылки «На главную» и «Назад».PageUnavailable— сервис недоступен (403). Кнопка «На главную», ссылка «Назад».PageNotFound— страница не найдена (404). Кнопка «На главную».Offline— нет соединения. Кнопка «Обновить».Redirect— ссылка устарела. Кнопка «Перейти» наmainPageUrl.Custom— контент берётся изcustom.
Logo variant (default None)
Логотип над заголовком (logoVariant):
Cloud— фирменный логотип cloud.ru.Custom— свой узел через пропlogo.None— без логотипа.
Custom
При errorType='Custom' объект custom задаёт:
title— заголовок.description— текст под заголовком.statusCode— код статуса в теге у заголовка.mainButton—label/href/onClick/iconглавной кнопки.showMainPageLink/showBackLink— видимость ссылок.actionWrapperClassName— класс на контейнере действий.
Установка
pnpm add @cloud-ru/ds-uikit-product-error-pages
import { ErrorPage } from '@cloud-ru/ds-uikit-product-error-pages'
import '@cloud-ru/ds-uikit-product-error-pages/style.css'
Примеры использования
Страница не найдена
Page not found404
Try starting from another page
tsx
import { ERROR_TYPE, ErrorPage, LOGO_VARIANT } from '@cloud-ru/ds-uikit-product-error-pages';
export function NotFound() {
return (
<ErrorPage
errorType={ERROR_TYPE.PageNotFound}
logoVariant={LOGO_VARIANT.Cloud}
mainPageUrl='/'
onSupportCenterClick={() => window.open('https://cloud.ru/support', '_blank')}
/>
);
}Нет соединения
No Internet Connection
Check your internet connection and try refreshing the page
tsx
import { ERROR_TYPE, ErrorPage, LOGO_VARIANT } from '@cloud-ru/ds-uikit-product-error-pages';
export function Offline() {
return <ErrorPage errorType={ERROR_TYPE.Offline} logoVariant={LOGO_VARIANT.Cloud} />;
}Кастомный контент
ACME
Quota exceeded429
Your project reached its resource limit. Upgrade the plan to continue.
tsx
import { ERROR_TYPE, ErrorPage, LOGO_VARIANT } from '@cloud-ru/ds-uikit-product-error-pages';
export function Custom() {
return (
<ErrorPage
errorType={ERROR_TYPE.Custom}
logoVariant={LOGO_VARIANT.Custom}
logo={<span>ACME</span>}
mainPageUrl='/dashboard'
custom={{
title: 'Quota exceeded',
description: 'Your project reached its resource limit. Upgrade the plan to continue.',
statusCode: 429,
mainButton: { label: 'Upgrade plan', href: '/billing' },
showMainPageLink: true,
showBackLink: true,
}}
/>
);
}Props
Types
Props
ErrorPageProps| Prop | Type | Default | Required | Description |
|---|---|---|---|---|
className | string | — | no | Дополнительный класс. |
custom | ErrorPageCustomConfig | — | no | Объект с кастомными настройками, используется только для `ERROR_TYPE.Custom`. |
data-test-id | string | — | no | |
errorType | "Custom" | "FrontendError" | "Offline" | "PageNotFound" | "PageUnavailable" | "Redirect" | FrontendError | no | Тип ошибки — определяет заголовок, текст, код статуса и набор действий. |
logo | ReactNode | — | no | Кастомный логотип, используется только с `LOGO_VARIANT.Custom`. |
logoVariant | "Cloud" | "Custom" | "None" | None | no | Вариант логотипа над заголовком. |
mainPageUrl | string | / | no | URL главной страницы (для кнопки/ссылки «На главную»). |
onSupportCenterClick | (() => void) | — | no | Обработчик клика по кнопке «Служба поддержки». Если задан — кнопка отображается. |
showMainButton | boolean | true | no | Показать основную (filled) кнопку действия. |