分页

分页组件允许您显示活动页面并在多个页面之间导航。


安装

npx nextui-cli@latest add pagination
以上命令仅用于单个安装。如果 @nextui-org/react 已全局安装,则可以跳过此步骤。

导入

NextUI 导出 3 个与分页相关的组件

  • Pagination: 用于显示分页的主要组件。
  • PaginationItem: 用于显示分页项目的内部组件。
  • PaginationCursor: 用于显示当前页面的内部项目组件。

用法

禁用

尺寸

颜色

变体

您可以使用 variant 属性来更改分页项目的样式。

带控件

您可以将 showControls 设置为 true 以显示 nextprevious 按钮。

分页循环

如果您想循环分页,可以将 loop 属性设置为 true。当光标到达最后一页时,它将返回到第一页,反之亦然。

更改初始页

您可以通过设置 initialPage 属性来更改初始页。

紧凑分页

您可以将 isCompact 属性设置为 true 以显示分页的简化版本。

带阴影

您可以使用 showShadow 属性在活动页面项下方显示阴影。

受控

兄弟姐妹

您可以通过设置 siblings 属性来控制在当前页面前后显示的页面数量。

边界

您可以通过设置 boundaries 属性来控制在分页开始和结束处显示的页面数量。

自定义项目

您可以使用 renderItem 属性来自定义分页项目。

插槽

  • base: 主要分页插槽。
  • wrapper: 分页包装器插槽。它包裹着分页项目。
  • prev: 上一页按钮插槽。
  • next: 下一页按钮插槽。
  • item: 分页项目插槽,应用于中间项目。
  • cursor: 当前页插槽。仅在 disableCursorAnimationfalsedisableAnimation 为 `false` 时可用。
  • forwardIcon: 前进图标插槽。当悬停在省略号按钮上时出现。
  • ellipsis: 省略号插槽。
  • chevronNext: 下一个图标插槽。

自定义样式

您可以通过将自定义 Tailwind CSS 类传递给组件插槽来自定义 Pagination 组件。

自定义实现

如果您需要进一步自定义分页,可以使用 usePagination 钩子来创建您自己的实现。

数据属性

Paginationbase 元素上具有以下属性

  • data-controls: 指示分页是否具有控件。基于 showControls 属性。
  • data-loop: 当分页循环时。基于 loop 属性。
  • data-dots-jump: 指示分页是否具有点跳跃。基于 dotsJump 属性。
  • data-total: 页面总数。基于 total 属性。
  • data-active-page: 活动页面。基于 activePage 属性。

无障碍性

  • 根节点默认具有 navigation 的角色。
  • 分页项具有一个 aria-label,用于标识项的用途(“下一页按钮”,“上一页按钮”等),您可以使用 getItemAriaLabel 函数覆盖此标签。
  • 分页项按 tab 顺序排列,tabindex 为“0”。

API

分页属性

属性类型描述默认值
变体flat | bordered | light | faded分页变体。flat
颜色default | primary | secondary | success | warning | danger分页颜色主题。default
尺寸sm | md | lg分页尺寸。md
圆角none | sm | md | lg | full分页边框圆角。xl
总页数页码总页数。1
dotsJump页码在“...”按钮上添加或减去的页数。5
initialPage页码初始页码。(非受控)1
page页码当前页码。(受控)-
siblings页码在当前页码前后显示的页数。1
boundaries页码在分页开始和结束处显示的页数。1
loopboolean分页是否循环。false
isCompactboolean分页是否采用紧凑样式。false
isDisabledboolean分页是否禁用。false
showShadowboolean分页光标是否显示阴影。false
showControlsboolean分页是否显示控件。false
disableCursorAnimationboolean分页光标是否隐藏。false
renderItemPaginationItemProps分页项渲染函数。-
getItemAriaLabel(page: string) => string允许自定义分页项 aria-label 的函数。-
disableAnimationboolean分页光标是否动画。false
classNamesRecord<"base"| "wrapper" | "prev"| "next" | "item" | "cursor" | "forwardIcon" | "ellipsis" | "chevronNext", string>允许为分页插槽设置自定义类名。-

分页事件

属性类型描述
onChange(page: number) => void分页活动页码更改时调用的处理程序。

类型

分页项属性

export type PaginationItemRenderProps = {
// The pagination item ref.
ref?: Ref<T>;
// The pagination item value.
value: PaginationItemValue;
// The pagination item index.
index: number;
// The active page number.
activePage: number;
// Whether the pagination item is active.
isActive: boolean;
// Whether the pagination item is the first item in the pagination.
isFirst: boolean;
// Whether the pagination item is the last item in the pagination.
isLast: boolean;
// Whether the pagination item is the next item in the pagination.
isNext: boolean;
// Whether the pagination item is the previous item in the pagination.
isPrevious: boolean;
// The pagination item className.
className: string;
// Callback to go to the next page.
onNext: () => void;
// Callback to go to the previous page.
onPrevious: () => void;
// Callback to go to the page.
setPage: (page: number) => void;
};
type renderItem?: (props: PaginationItemRenderProps) => ReactNode;