React Query 分页
date
Nov 5, 2025
slug
react-query-pagination
status
Published
tags
React Query
summary
让你的数据像看电视剧一样"一集一集"来
type
Post
小伙伴们好!今天咱们聊聊分页——这个让大数据变得"平易近人"的神奇技术。
开场:为什么需要分页?
想象一下这两个场景:
场景一:小而美
场景二:巨无霸
这就像是:
- 场景一:点一杯咖啡,立即到手
- 场景二:点了整个咖啡店的库存,然后说"我其实只想喝一杯"
分页原理:数据的"连续剧模式"
分页就像看电视剧:
- 一次给你一集(一页)
- 想看下一集?点"下一页"
- 想回看?点"上一页"
- 不会一次性把整季砸给你
API 分页参数:
page:第几集(页)
per_page:每集多长(每页多少条)
基础实现:造个遥控器
先从最简单的开始:
状态管理:记住当前在看第几集
React Query 集成:让缓存知道这是第几页
缓存结构就像这样:
问题一:切换页面时的"白屏闪烁"
基础版的问题:
这就像换电视频道时的"雪花屏"——体验很差!
优化一:用旧数据占位
还记得上一课的
placeholderData 吗?这里它又派上用场了!这行代码的意思是:"新数据还没来?先显示上一页的,别让屏幕空着!"
加点视觉反馈
效果:
- 点击"下一页"
- 旧列表变半透明(告诉用户:数据在更新)
- 新数据到达,恢复正常透明度
- 没有白屏,没有跳动!
优化二:按钮的智能禁用
别让用户做无用功:
判断是否最后一页的小技巧:
- 如果返回的数据不足一页(比如只有2条,而
PAGE_SIZE是4)
- 说明没有更多数据了!
终极优化:预加载下一页
这是真正的"黑科技"——提前偷偷加载下一页!
这就像是:
- 你在看第3集
- React Query 偷偷下载第4集
- 你点"下一集",瞬间播放!
完整的用户体验流程
- 首次加载:显示加载动画(没办法,第一次总要等)
- 切换页面:
- 立即显示半透明的旧数据(无白屏)
- 按钮禁用防误操作
- 新数据到达,平滑切换
- 返回已访问页:瞬间显示(从缓存读取)
- 访问下一页:很可能瞬间显示(已预加载)
缓存可视化
最佳实践总结
DO 应该做的:
- 合理设置每页大小
- 记得重置页码
- 使用 placeholderData 避免闪烁
- 预加载提升体验
DON'T 不要做的:
- 不要一次加载所有页(那就不叫分页了)
- 不要忘记处理边界(第一页、最后一页)
- 不要在加载时让用户乱点(禁用按钮)
进阶思考
无限滚动 vs 分页
- 分页:用户有掌控感,知道自己在哪
- 无限滚动:适合刷内容(抖音模式)
虚拟滚动
当单页数据还是太多时,考虑虚拟滚动(只渲染可见区域)
总结
React Query 的分页功能让我们能够:
- 缓存每一页:访问过的页面秒开
- 平滑切换:用 placeholderData 消除白屏
- 智能预加载:让用户感觉"这网站真快!"
- 优雅降级:网络慢也有好体验
记住:好的分页就像好的电梯——用户几乎感觉不到在"翻页",数据就自然地出现了!