新闻详情

新闻详情

首页 / 资讯中心 / 详情

Material UI Pagination 分页组件详解:siblingCount、受控模式、usePagination Hook 与路由集成实战

发布时间:2026/9/5 18:11:58来源:尧图网络
Material UI Pagination 分页组件详解:siblingCount、受控模式、usePagination Hook 与路由集成实战
Material UI Pagination 分页组件详解siblingCount、受控模式、usePagination Hook 与路由集成实战【免费下载链接】material-uiMaterial UI: Comprehensive React component library that implements Googles Material Design. Free forever.项目地址: https://gitcode.com/GitHub_Trending/ma/material-ui本文以 Material UIMUI官方文档 Pagination 组件页 为主体覆盖从基础用法、页码范围裁剪siblingCount/boundaryCount、受控分页、路由集成到无头 HookusePagination的完整技术脉络并结合 Pagination 组件源码 给出每个属性的默认值与底层实现依据帮助你在博客、电商列表、后台表格等真实场景中正确选择Pagination或TablePagination并写出可复制运行的分页代码。组件定位与源码结构Pagination组件让用户从一个页面范围中选择特定页码。它适用于「不使用无限加载」时对任意条目列表进行分页的场景官方文档明确指出在SEO 很重要的上下文例如博客中优先使用Pagination而对大量表格数据分页则应使用TablePagination组件。组件的源码位于 packages/mui-material/src/Pagination 目录核心文件包括Pagination.js组件主体负责将usePagination返回的条目映射为PaginationItem并管理焦点逻辑paginationClasses.ts定义MuiPagination的类名工具root、ul、outlined、text配套的无头 HookusePagination位于 packages/mui-material/src/usePagination与条目组件PaginationItem位于packages/mui-material/src/PaginationItem三者共同构成分页体系的完整分层。基础用法最简示例只需count总页数一个必填语义的属性其余全部有默认值。基础示例见 BasicPaginationimport Pagination from mui/material/Pagination; export default function BasicPagination() { return Pagination count{10} /; }从 Pagination.js 源码 中解构出的默认值可以确认各属性缺省行为属性默认值说明count1总页数page—当前页受控从 1 开始defaultPage1非受控模式下的初始页码varianttext外观变体可选outlinedshapecircular页码按钮形状可选roundedsizemedium尺寸可选small、largecolorstandard选中页颜色支持主题调色板颜色siblingCount1当前页前后各显示几页boundaryCount1首尾固定显示几页showFirstButton/showLastButtonfalse是否显示「首页 / 末页」按钮hidePrevButton/hideNextButtonfalse是否隐藏「上一页 / 下一页」按钮renderItem(item) PaginationItem {...item} /自定义每个分页条目的渲染外观变体变体、形状与尺寸文档提供了三组外观示例分别对应variant、shape、size三个属性Outlined paginationvariantoutlined示例见 PaginationOutlinedRounded paginationshaperounded示例见 PaginationRoundedPagination sizesizesmall或large示例见 PaginationSize。在样式层面Pagination.js 中根节点被styled(nav)定义overridesResolver会按ownerState.variant叠加outlined/text对应的类名内部ul固定为 flex 布局、flexWrap: wrap、无列表样式因此分页天然支持窄容器下的换行展示。首页 / 末页按钮与隐藏前后翻页按钮文档的 Buttons 章节说明可以可选地启用首页、末页按钮或禁用上一页、下一页按钮。示例见 PaginationButtons对应属性为showFirstButton、showLastButton、hidePrevButton、hideNextButton四个布尔属性均可自由组合。一个容易踩的边界情况被源码显式处理了当你在第 1 页点击「首页/上一页」、或在末页点击「下一页/末页」时该按钮点击后会变为 disabled。如果此时焦点正停留在该按钮上焦点会「丢失」handleItemClick 与焦点恢复逻辑 会把焦点记录到pendingFocusRef并在selectedPage更新后自动把焦点移到带aria-currentpage的选中页上。使用usePagination自行渲染时需要注意复刻这一行为。自定义控制图标文档说明控制图标前后翻页箭头可以自定义示例见 CustomIcons通过showFirstButton、showLastButton与自定义renderItem将PaginationItem的箭头替换为自定义 SVG/图标即可。页码范围siblingCount 与 boundaryCount这是Pagination最核心的两个数字属性siblingCount控制页码省略号两侧显示的数字个数相对当前页boundaryCount控制首尾页号旁固定显示的页码个数。官方示例 PaginationRanges 展示了四组组合count{11}、defaultPage{6}Stack spacing{2} Pagination count{11} defaultPage{6} siblingCount{0} / Pagination count{11} defaultPage{6} / {/* Default ranges */} Pagination count{11} defaultPage{6} siblingCount{0} boundaryCount{2} / Pagination count{11} defaultPage{6} boundaryCount{2} / /Stack结合默认值siblingCount1、boundaryCount1默认渲染形如1 … 5 6 7 … 11将siblingCount设为 0 则只剩当前页与边界页将boundaryCount设为 2 则首尾各固定显示两页。这两个参数共同决定了条目数组中page、start-ellipsis、end-ellipsis三类条目的分布其裁剪逻辑全部收敛在usePagination内部组件层只负责渲染。受控分页非受控模式下用defaultPage指定初始页onChange回调签名是onChange(event, page)其中page从 1 开始。受控模式则由外部状态接管核心写法对应 PaginationControlled 示例export default function PaginationControlled() { const [page, setPage] React.useState(1); const handleChange (event, value) { setPage(value); }; return Pagination page{page} count{10} onChange{handleChange} /; }传入page后组件进入受控模式页码变化只会触发onChange需要你在回调中更新状态Pagination的pageprop 从 1 开始编号源码 PropTypes 注释亦强调这一点见 Pagination.js。路由集成renderItem 自定义组件对于需要把页码写进 URL 的场景SEO 友好文档的 Router integration 章节给出了标准做法通过renderItem把PaginationItem的component换成路由的Link。完整可运行的 PaginationLink 示例function Content() { const location useLocation(); const query new URLSearchParams(location.search); const page parseInt(query.get(page) || 1, 10); return ( Pagination page{page} count{10} renderItem{(item) ( PaginationItem component{Link} to{/inbox${item.page 1 ? : ?page${item.page}}} {...item} / )} / ); }要点renderItem接收的每个item都携带page、type、selected、onClick等字段展开为PaginationItem的 props 即可第 1 页的 URL 刻意不带查询参数保证首页链接干净可分享。无头 HookusePagination文档明确usePagination()是一个无头 Hook面向高级定制场景暴露它接受与Pagination组件几乎相同的选项只是去掉了所有与 JSX 渲染相关的 propPagination组件正是构建在这个 Hook 之上的。import usePagination from mui/material/usePagination;Hook 的返回值为{ items, ... }items中每一项的type取值包含first、previous、page、next、last、start-ellipsis、end-ellipsis。UsePagination 官方示例 演示了完全自行渲染遍历items对start-ellipsis/end-ellipsis渲染省略号「…」对page类型渲染原生button选中时加粗其余类型渲染翻页按钮并手动实现「点击后按钮禁用时移动焦点到首/末页」的无障碍逻辑——这正是 Pagination.js 中 handleItemClick 所做的事情说明 Hook 使用者需要自行保证焦点管理的等价行为。TablePagination与表格配套的另一种分页文档特别提示为大型表格数据分页应使用TablePagination组件可参考文档 table 章节的 custom pagination options 内容。两者最关键的差异在页码起点Pagination的page从1开始以匹配「页码要出现在 URL 中」的需求TablePagination的page从0开始以匹配渲染大量表格数据时零基 JavaScript 数组切片的需求items.slice(page * rowsPerPage, ...)。因此在混合使用两个组件时务必做page的 ±1 换算这是实际项目中最常见的 off-by-one 错误来源。无障碍Accessibility文档的 Accessibility 章节包含两部分均已在源码中得到印证ARIA根节点默认带有rolenavigation源码中即渲染为nav和aria-labelpagination navigation见 Pagination.js 第 158 行每个分页条目都会获得说明其用途的aria-label例如 go to first page、go to previous page、go to page 1。这些文案默认由 defaultGetAriaLabel 生成type page时返回Go to page N选中页则无前缀Go to其他类型返回Go to ${type} page。可本地化的文案可通过getItemAriaLabelprop 覆盖其签名为(type, page, selected) string。键盘分页条目处于 Tab 顺序中tabindex 为 0配合上文提到的焦点恢复逻辑键盘用户在翻页后焦点会稳定落在新的选中页上。样式类名与定制paginationClasses.ts 导出了MuiPagination的全部类名root根元素、ul列表容器、outlinedvariantoutlined时、textvarianttext时可配合sx、classesprop 或主题components.MuiPagination.styleOverrides做样式覆盖。小结Material UI 的Pagination以「组件 无头 Hook」双层设计覆盖从开箱即用到完全自渲染的分页需求variant/shape/size/color控制外观siblingCount/boundaryCount控制页码范围showFirstButton/showLastButton/hidePrevButton/hideNextButton控制导航按钮renderItem打通路由集成usePagination则把条目计算逻辑开放给定制场景而表格数据分页请切换到TablePagination并注意两者页码起点1 基 vs 0 基的差异。所有属性默认值均可在 packages/mui-material/src/Pagination/Pagination.js 中逐一对应验证。【免费下载链接】material-uiMaterial UI: Comprehensive React component library that implements Googles Material Design. Free forever.项目地址: https://gitcode.com/GitHub_Trending/ma/material-ui创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Caveman 集成体系详解:Skills、Hooks 与 Plugins 的权限边界、实现原理与卸载方法 2026/9/5 18:48:03

Caveman 集成体系详解:Skills、Hooks 与 Plugins 的权限边界、实现原理与卸载方法

Caveman 集成体系详解:Skills、Hooks 与 Plugins 的权限边界、实现原理与卸载方法 【免费下载链接】caveman 🪨 why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman 项目地址: https:…

阅读更多 →
Gradio 入门:不写前端,三个场景搭出 LLM 对话界面 2026/9/5 18:48:03

Gradio 入门:不写前端,三个场景搭出 LLM 对话界面

Gradio 入门:不写前端,三个场景搭出 LLM 对话界面 【免费下载链接】llm-cookbook 面向开发者的 LLM 入门教程,吴恩达大模型系列课程中文版 项目地址: https://gitcode.com/GitHub_Trending/ll/llm-cookbook 模型在终端里跑通了&#x…

阅读更多 →
LabVIEW界面中英文动态切换:从资源分离到事件驱动的完整实现方案 2026/9/5 18:48:03

LabVIEW界面中英文动态切换:从资源分离到事件驱动的完整实现方案

简介:本资源是一套基于LabVIEW开发的中英文双语切换用户界面实现方案,面向自动化测试、仪器控制及工业软件开发领域的工程师与高校师生,解决多语言界面本地化这一实际工程需求。压缩包共9个文件(54KB),包含…

阅读更多 →
三角洲行动进不去?一套排查顺序解决卡加载、闪退与登录失败 2026/9/5 18:48:03

三角洲行动进不去?一套排查顺序解决卡加载、闪退与登录失败

这次要处理的是一个非常典型的“游戏进不去”全家桶:进游戏卡加载进度、登录失败、弹未知错误、闪退崩溃、进图后卡顿掉帧。标题里提到的“8月9号问题已解决”说明这类故障往往伴随版本更新集中出现,而且修复节奏通常是“官方先解决大头,玩家…

阅读更多 →
示波器电路调试实操指南:从探头校准到自动化采集 2026/9/5 18:48:03

示波器电路调试实操指南:从探头校准到自动化采集

这里说的“电路分析神器”,不是我给示波器瞎起的广告词,而是它在硬件调试里的地位确实特殊。芯片不工作、信号有毛刺、通信时好时坏、电源纹波偏大,这些问题靠万用表只能看到一个平均结果,靠逻辑分析仪又看不到模拟波形细节。示波…

阅读更多 →
ESP32-C3自制低成本示波器:从采样原理到波形显示全攻略 2026/9/5 18:45:03

ESP32-C3自制低成本示波器:从采样原理到波形显示全攻略

如果你在搜索框里输入“esp32c3 示波器”,大概率是两种情况:一是手里已经有一块 ESP32-C3 开发板,想拿它做一个低成本波形采集工具;二是准备测 I2C、PWM、音频这类低速信号,但不想每次都搬台式示波器。这次我们就把这个…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞