UI Design System
build dev

Pagination

在多页数据之间切换。中文惯用名:分页。
稳定本期新增已接入

元信息

字段值
规范 IDcomponent.pagination
名称Pagination
二级分类导航(navigation)
用途在多页数据之间切换
描述中文惯用名:分页。

预览

静态结构:渲染为 <nav aria-label="pagination" data-slot="pagination"> → PaginationContent(data-slot="pagination-content",ul)→ 每项 PaginationItem(data-slot="pagination-item")。首尾为 PaginationPrevious / PaginationNext(Chevron 图标;sm 断点以上附 Previous / Next 文案,aria-label 为 Go to previous / next page),不可用时 aria-disabled + 禁用样式且点击无效;中间为页码链接 PaginationLink(data-slot="pagination-link",当前页 data-active + 分页激活令牌描边底色)与省略号 PaginationEllipsis(MoreHorizontal 图标)。页码由 ceil(total / pageSize) 推导(至少 1 页);页码窗口:总页数 ≤ 7 全部展示,否则按当前页位置取 7 项窗口(当前页靠前 → 1~5 + 省略 + 末页;靠后 → 首页 + 省略 + 末 5 页;居中 → 首页 + 省略 + 当前页±1 + 省略 + 末页)。本预览为受控用法:page 驱动 state,点击经 events.onChange 回写。

DSL 结构

DslNode
{
  "type": "Pagination",
  "props": {
    "total": 95,
    "pageSize": 10,
    "page": "${state.page}"
  },
  "events": {
    "onChange": {
      "action": "setState",
      "params": {
        "page": "${event}"
      }
    }
  }
}

何时用

何时使用

  • 在多页数据之间切换:表格、卡片列表、搜索结果的分页浏览。
  • 用户需要定位到具体页或全局页码感知:需要显示「共 N 页」的量级信息时。
  • 服务端分页:total + pageSize 来自接口,page 受控并驱动下一次请求。

何时不用

  • 浏览型信息流(下拉加载更多):使用无限滚动。
  • 数据量小(一页内可展示完):不渲染分页。
  • 只需要「上一页 / 下一页」的场景:当前适配器固定渲染完整页码序列,轻量场景可考虑用 Button 组自建。

变体

变体视觉形态适用场景
受控分页page 由 state 驱动,onChange 回写并触发取数服务端分页的表格 / 列表
非受控分页不传 page,组件内部自管理当前页纯前端切分已加载数据
短序列(≤7 页)页码全显,无省略号数据量中等的列表
长序列(>7 页)省略号 + 7 项窗口滑动大数据量结果集

API 属性

属性类型默认值说明
totalnumber0总条数(可绑表达式解析后的数字);页数 = ceil(total / pageSize),至少 1
pageSizenumber10每页条数
pagenumber—受控当前页(可绑 ${state.x});缺省内部自管理
onChange(page: number) => void—翻页事件,传出目标页码 number(Renderer 绑定 events.onChange);上一页 / 下一页与页码点击走同一事件
className / stylestring / CSSProperties—通用:根节点 class 合并 / 内联样式

使用规范

  • 分页状态是单一数据源:受控时由 page 驱动取数,不在组件内外各存一份当前页。
  • 改变筛选条件 / 每页条数时把 page 重置为 1,避免落在越界页。
  • pageSize 与 total 来自同一份接口响应,页码数量才不会与数据不一致。
  • 分页旁给出结果量级(共 N 条 / 每页 M 条),帮助用户判断翻页范围。
  • 翻页时列表区域给出加载态,避免用户重复点击翻页。

正例

  • ✓ 表格分页:total={95} pageSize={10} page 绑 state,onChange 触发 setState 并重新取数。
  • ✓ 搜索结果:结果数较多时展示分页,同时显示「共 95 条」辅助信息。

反例

  • ✕ 在无限滚动列表底部再放分页(两种浏览模型冲突)。
  • ✕ 把 page 作为独立于数据请求的本地状态(翻页后数据与页码不同步)。

Design Token 映射

不适用:组件 tokenRefs 为空:样式 Token 数据尚未接入,三层映射(Primitive → Semantic → Component)待样式 Token 接入后回填。