Pagination
Компонент для навигации по страницам с поддержкой сложных сценариев отображения. Особое внимание уделено цифровой доступности и гибкой кастомизации.
Стиль кнопок навигации
Задается свойством navigationButtonsStyle:
Кастомизация элементов
С помощью свойств renderPageButton и renderNavigationButton можно отрисовать кастомные кнопки навигации и кнопки перехода по страницам.
- В
renderPageButtonпрокидывается объект с пропсами типаCustomPaginationPageButtonProps- наследует APITappable. - в
renderNavigationButtonпрокидывается объект с пропсами типаCustomPaginationNavigationButtonнаследует APIButton.
В примере ниже мы задаём пользовательские кнопки навигации и даём возможность показать всплывающую подсказку при наведении на конкретную страницу:
Хук usePagination
Для полного контроля над отображением используйте хук:
Когда использовать хук
- Нестандартный UI пагинации.
- Интеграция с кастомной логикой.
- Сложные анимации переходов.
Доступность (a11y)
Компонент использует <nav role="navigation"> и связывает элементы через aria-labelledby,
поддерживая семантику навигации.
Дополнительно убедитесь, что:
-
заданы уникальные метки, если на странице несколько компонентов:
// ❌ Плохо (дублирующиеся метки) <Pagination navigationLabel="Страницы" /> <Pagination navigationLabel="Страницы" /> // ✅ Хорошо <Pagination navigationLabel="Страницы статей" /> <Pagination navigationLabel="Страницы комментариев" /> -
в
navigationLabelне используется слова “Навигация” или слова близких по значению, так как скринридер и так зачитывает это видя тегnavилиrole="navigation". Лучше ограничиться чем-то вроде “Страницы”.
Свойства и методы
Pagination
| Свойство | Описание |
|---|---|
boundaryCount | numberКол-во всегда видимых страниц в начале и в конце. По умолчанию: 1 |
currentPage | numberТекущая страница. По умолчанию: 1 |
disabled | booleanБлокировка взаимодействия с компонентом. По умолчанию: - |
getPageLabel | ((isCurrent: boolean) => string)[a11y] Функция для переопределения и/или локализации метки кнопки страницы. По умолчанию: - |
getRootRef | Ref<HTMLElement>По умолчанию: - |
navigationButtonsStyle | "caption" | "both" | "icon"Задаёт стиль отображения кнопок навигации.
По умолчанию: icon |
navigationLabel | string[a11y] Метка для обозначения блока навигации. По умолчанию: Страницы |
navigationLabelComponent | ElementType<any, keyof IntrinsicElements>Тип элемента отрисовки блока навигации. По умолчанию: h2 |
nextButtonCaption | stringДекоративный текст для кнопки навигации вперёд. По умолчанию: Вперёд |
nextButtonLabel | string[a11y] Метка для кнопки навигации вперёд. По умолчанию: Перейти на следующую страницу |
nextButtonTestId | stringПередает атрибут По умолчанию: - |
onChange | ((page: number, event: MouseEvent<HTMLElement, MouseEvent>) => void)Обработчик изменения выбранной страницы. По умолчанию: - |
pageButtonTestId | ((day: PaginationPageType, active: boolean) => string)Передает атрибут По умолчанию: - |
prevButtonCaption | stringДекоративный текст для кнопки навигации назад. По умолчанию: Назад |
prevButtonLabel | string[a11y] Метка для кнопки навигации назад. По умолчанию: Перейти на предыдущую страницу |
prevButtonTestId | stringПередает атрибут По умолчанию: - |
renderNavigationButton | ((props: ButtonProps & { 'data-page': number; 'data-testid': string | undefined; }) => ReactNode) | undefinedФункция для кастомного рендера кнопок навигации По умолчанию: - |
renderPageButton | ((props: TappableOmitProps & { 'data-page': number; }) => ReactNode)Функция для кастомного рендера кнопок страниц. По умолчанию: - |
siblingCount | numberКол-во всегда видимых страниц по краям текущей страницы. По умолчанию: 1 |
totalPages | numberОбщее кол-во страниц. По умолчанию: 1 |
usePagination
| Свойство | Описание |
|---|---|
boundaryCount | numberКол-во всегда видимых страниц в начале и в конце. По умолчанию: 1 |
currentPage | numberТекущая страница. По умолчанию: 1 |
siblingCount | numberКол-во всегда видимых страниц по краям текущей страницы. По умолчанию: 1 |
totalPages | numberОбщее кол-во страниц. По умолчанию: 1 |