讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在项目中实现分页功能_使用JavaScript实现分页显示

浅宇君_3955

浅宇君_3955

发布时间:2026-02-08 10:08:02

|

1483人浏览过

|

来源于php中文网

原创

推荐用纯函数 getPaginatedData 封装分页逻辑,接收 data、currentPage、pageSize,返回 slice 切片子数组,确保不可变性、可复用、易测试。

如何在项目中实现分页功能_使用javascript实现分页显示

分页逻辑该用哪个函数封装?

分页的核心是「从数组中切出当前页的数据」,推荐用一个纯函数 getPaginatedData 处理,不依赖 DOM 或框架状态。它只接收原始数据数组、当前页码 currentPage 和每页条数 pageSize,返回切片后的子数组。

常见错误是把分页逻辑和渲染混在一起,导致无法复用或测试困难。比如在 React 中直接在 useEffect 里计算切片,或在 Vue 的 computed 中硬编码 pageSize —— 这会让逻辑耦合 UI,后续改每页显示数就得翻遍模板。

  • currentPage 必须从 1 开始(用户感知页码),但数组索引从 0,所以起始索引是 (currentPage - 1) * pageSize
  • 结束索引用 Math.min(start + pageSize, data.length),避免越界报错
  • 不要用 splice 原地修改原数组,用 slice 保证不可变性

前端分页要不要发请求?

取决于数据量。如果总数据不到 200 条,一次性拉取后前端分页更稳:没网络抖动、无 loading 状态管理、跳页响应快。这时候 fetch 只需执行一次,后续所有翻页都是纯内存操作。

一旦总条数上万,或用户可能只看前几页,就必须后端分页 —— 否则首屏加载慢、内存占用高、手机端易卡死。此时前端要传 page 和 limit 参数给接口,且必须校验后端返回的 total 字段来算总页数,不能靠前端猜。

立即学习“Java免费学习笔记(深入)”;

React 组件生成器
React 组件生成器

根据项目规范生成 React 和 Vue 组件,包括 TypeScript 类型定义、Ant Design 5 集成、Tailwind CSS 样式及 Vitest 测试文件。当用户提出创建、生成或搭建前端组件的需求时启用,例如:“帮我写一个表格组件”、“生成一个弹窗”、“create a form component”、“写一个列表页”、“生成一个下拉选择器”。该能力在以下任一场景触发:涉及 React/TSX/Vue 组件生成、UI 组件创建,或为组件生成测试文件。

下载
  • 前端分页时,总页数 = Math.ceil(data.length / pageSize)
  • 后端分页时,总页数 = Math.ceil(response.total / pageSize),且需容错:若 response.total 缺失,降级为显示“下一页”按钮而非页码数字
  • 别在 URL 上用 ?page=abc 这类非法值,parseInt 后要检查是否为有效数字

点击页码按钮时如何避免重复触发?

用户手快连点「下一页」,可能触发多次 fetch 或多次 setState,造成状态错乱或请求堆积。关键不是防抖,而是加状态锁 + 请求取消机制。

对于原生 JS + fetch:用 AbortController 在发起新请求前 abort 上一个;对于 React,可在 useEffect 清理函数中 abort;Vue 3 的 onBeforeUnmount 同理。

  • 维护一个 isLoading 状态,按钮点击后立即设为 true,禁用按钮,请求完成再设回 false
  • 不要只禁用按钮却不阻断 onClick 逻辑,否则用户右键新标签页打开链接仍会触发
  • 如果用 async/await,确保 try/catch 包住整个流程,失败后也要重置 isLoading

页码组件怎么处理“省略号”逻辑?

当总页数太多(比如 50 页),不能全铺开。标准做法是:始终显示第 1 页、最后 1 页、当前页及左右各 1~2 页,中间用 ... 隔开。这个逻辑容易写错边界,建议拆成独立函数 generatePageNumbers。

典型错误是把「当前页居中」当成固定规则,结果第 2 页时左边没空间,还强行留空;或总页数只有 5 页却仍画 ...。必须按实际页数动态判断。

  • 当 totalPages ,直接显示 1 到 <code>totalPages
  • 否则:固定显示 1、...、currentPage-1、currentPage、currentPage+1、...、totalPages
  • 注意 currentPage-1 不能小于 2,currentPage+1 不能大于 totalPages-1,否则替换为相邻真实页码

分页最麻烦的从来不是切数组,而是各种边界组合:首页 + 总数为 0、最后一页 + 用户手动输超限页码、后端返回空数组但 total 是 100……这些情况不提前想清楚,上线后第一波用户反馈就是分页按钮点不动或者显示 NaN。

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

超级麦吉

一款通过数字员工协作完成调研、数据分析与文档制作的AI办公平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

3208

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

5169

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3849

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

486

2026.01.19

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

6387

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2668

2023.08.10

length函数用法
length函数用法

length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此,length函数在计算字符串长度时会将多字节字符作为一个字符来计算。更多关于length函数的用法,大家可以阅读本专题下面的文章。

1927

2023.09.19

go语言 数组和切片
go语言 数组和切片

本专题整合了go语言数组和切片的区别与含义,阅读专题下面的文章了解更多详细内容。

1972

2025.09.03

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

100

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app快速上手
uni-app快速上手

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 17.3万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn