0

0

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

P粉602998670

P粉602998670

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

|

783人浏览过

|

来源于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 只需执行一次,后续所有翻页都是纯内存操作。

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

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

  • 前端分页时,总页数 = 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 到 totalPages
  • 否则:固定显示 1...currentPage-1currentPagecurrentPage+1...totalPages
  • 注意 currentPage-1 不能小于 2,currentPage+1 不能大于 totalPages-1,否则替换为相邻真实页码

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

1321

2023.10.19

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

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

276

2025.10.17

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

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

2200

2025.12.29

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

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

34

2026.01.19

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

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

404

2023.07.18

堆和栈区别
堆和栈区别

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

584

2023.08.10

length函数用法
length函数用法

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

931

2023.09.19

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

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

47

2025.09.03

Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

39

2026.02.06

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 8万人学习

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

共26课时 | 1.5万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号