Skip to content

Pagination

Pagination 用于分页导航,适合列表、表格、搜索结果等需要切换页码的场景。

Basic

传入 count 后,Pagination 会自动生成上一页、页码、下一页,并在非受控模式下维护当前页。

Controlled

传入 pageonPageChange 后进入受控模式,适合与表格、请求参数或路由状态同步。

Ellipsis

页码较多时会根据当前页、边界页数和相邻页数自动生成省略号。

Boundary

通过 boundaryCountsiblingCount 可以控制首尾页与当前页相邻页的展示数量。

Previous / Next

如果页面空间有限,可以关闭上一页和下一页按钮,只保留页码块。

Disabled

disabled 会禁用所有自动生成的分页项。

Custom Href

getItemHref 可以为自动生成项提供链接地址,便于和路由或 URL 查询参数衔接。

Render Item

renderItem 可以接管每一个自动生成项的渲染,适合自定义上一页、下一页文案或特殊页码样式。

Variant

variant 支持 outlinefilled,用于控制当前页的视觉强调方式。

SX Styling

PaginationPaginationContentPaginationItemPaginationLinkPaginationEllipsis 都支持 sx

常见场景

基础导航

用于页面跳转、层级定位或内容切换,帮助用户理解当前位置。

受控状态

当前项、展开项、页码或激活项需要和路由/查询参数同步时,使用受控模式。

可访问操作

导航项应保持可聚焦、可读,并在禁用或当前状态时给出明确语义。

Usage

配置式:

tsx
import * as React from "react";
import { Pagination } from "@ldkj/web-ui";

export function Example() {
  const [page, setPage] = React.useState(1);

  return (
    <Pagination
      count={12}
      page={page}
      onPageChange={(_, nextPage) => setPage(nextPage)}
    />
  );
}

组合式:

tsx
import {
  Pagination,
  PaginationContent,
  PaginationItem,
  PaginationLink,
  PaginationNext,
  PaginationPrevious,
} from "@ldkj/web-ui";

export function CompositionExample() {
  return (
    <Pagination>
      <PaginationContent>
        <PaginationItem>
          <PaginationPrevious href="#previous" />
        </PaginationItem>
        <PaginationItem>
          <PaginationLink href="#page-1">1</PaginationLink>
        </PaginationItem>
        <PaginationItem>
          <PaginationLink href="#page-2" isActive>
            2
          </PaginationLink>
        </PaginationItem>
        <PaginationItem>
          <PaginationNext href="#next" />
        </PaginationItem>
      </PaginationContent>
    </Pagination>
  );
}

API

Pagination

属性说明类型默认值
count总页数,传入后启用配置式渲染number-
page当前页,受控模式number-
defaultPage默认当前页,非受控模式number1
onPageChange页码变化回调(event, page) => void-
siblingCount当前页两侧展示的相邻页数number1
boundaryCount首尾边界展示页数number1
variant当前页视觉样式"outline" | "filled""outline"
showPreviousNext是否展示上一页和下一页booleantrue
disabled是否禁用全部自动生成的页码项booleanfalse
getItemHref生成自动页码链接地址(page, type) => string-
renderItem自定义自动生成项渲染(item: PaginationRenderItem) => React.ReactNode-
contentProps配置式渲染时透传给内部 PaginationContentReact.ComponentProps<typeof PaginationContent>-
className追加类名string-
class历史类名别名string-
style内联样式React.CSSProperties-
sxCSS-in-JS 样式入口SxProps-
children组合式内容React.ReactNode-
...rest原生 nav 属性React.ComponentProps<"nav">-

PaginationContent

属性说明类型默认值
className追加类名string-
class历史类名别名string-
style内联样式React.CSSProperties-
sxCSS-in-JS 样式入口SxProps-
children分页项React.ReactNode-
...rest原生 ul 属性React.ComponentProps<"ul">-

PaginationItem

属性说明类型默认值
className追加类名string-
class历史类名别名string-
style内联样式React.CSSProperties-
sxCSS-in-JS 样式入口SxProps-
children分页链接或省略号React.ReactNode-
...rest原生 li 属性React.ComponentProps<"li">-
属性说明类型默认值
isActive是否为当前页booleanfalse
disabled是否禁用链接booleanfalse
variant当前页视觉样式"outline" | "filled""outline"
size按钮尺寸ButtonProps<"a">["size"]"icon"
className追加类名string-
class历史类名别名string-
style内联样式React.CSSProperties-
sxCSS-in-JS 样式入口SxProps-
children链接内容React.ReactNode-
...rest本库 Button component="a" 属性Omit<ButtonProps<"a">, ...>-

PaginationPrevious / PaginationNext

属性说明类型默认值
children自定义内容,传入后覆盖默认图标和文字React.ReactNode-
className追加类名string-
class历史类名别名string-
style内联样式React.CSSProperties-
sxCSS-in-JS 样式入口SxProps-
...restPaginationLink 属性透传PaginationLinkProps-

PaginationEllipsis

属性说明类型默认值
className追加类名string-
class历史类名别名string-
style内联样式React.CSSProperties-
sxCSS-in-JS 样式入口SxProps-
...rest原生 span 属性React.ComponentProps<"span">-

PaginationRenderItem

属性说明类型
type自动生成项类型"page" | "previous" | "next" | "ellipsis"
page目标页码,省略号为 nullnumber | null
selected是否为当前页boolean
disabled是否禁用boolean
href自动生成链接地址string | undefined
onClick自动生成点击处理器React.MouseEventHandler<HTMLAnchorElement>

行为规则 / 优先级

  • 导航组件应让当前项、禁用项和跳转目标保持一致。
  • classNameclass 用于追加类名;如同时传入原生 style,内联样式会按 React 规则覆盖同名 CSS。
  • 复杂内容优先通过组合能力传入,避免在组件内部硬编码业务文案。
  • Pagination 的默认值应服务于最常见场景,特殊场景通过显式 props 覆盖。

Notes

  • count 未传入时,Pagination 保持组合式渲染,只输出 children
  • count 传入后,点击自动生成的页码会阻止默认链接跳转,并触发内部页码更新或 onPageChange
  • 受控模式请同时传入 pageonPageChange;非受控模式可使用 defaultPage
  • PaginationLink 默认渲染为链接语义,当前页会设置 aria-current="page"
  • PaginationPreviousPaginationNext 默认提供中文可访问性文案,也可以通过 children 自定义内容。