Vue Store 中封装高性能分页状态的核心是基于 cacheKey 隔离不同查询条件的数据缓存,按 key 管理 pages、total 等字段,实现零延迟翻页、智能缓存更新与历史恢复。

在 Vue Store 中封装高性能分页状态,核心不是只存当前页码和总数,而是围绕「缓存键(cacheKey)」组织数据,让翻页真正快起来、稳得住、不重复请求。
用 cacheKey 隔离不同查询条件
同一页面可能有多个筛选组合(如“状态=待审核+时间=本周”和“状态=已通过+时间=上月”),它们的分页数据必须互不干扰。关键做法是:
- 将筛选参数(filter)、排序(sort)、每页条数(pageSize)序列化为唯一 cacheKey,例如:
JSON.stringify({ status: 'pending', dateRange: 'thisWeek', pageSize: 20 })
- Store 中按 key 管理独立缓存对象,结构如下:
- data:当前页实际渲染的数据数组(可选,用于快速回显)
- total:该条件下的总条数(查一次即可,后续翻页不重拉)
-
pages:对象形式缓存各页内容,如
{ 1: [...], 2: [...], 5: [...] }
切换筛选时,自动清空对应 cacheKey 的 pages,但保留 total,避免重复统计总数。
递归分析 Vue 项目组件依赖,从入口文件生成组件层级图,支持 Vue 2/3,输出组件名、文件路径和属性。适用于分析组件结构、排查依赖或了解项目架构。
翻页优先读缓存,缺页才请求
用户点击第 7 页时,流程应是:
- 先检查 state[cacheKey].pages[7] 是否存在 → 存在则立刻渲染,零延迟
- 不存在 → 触发仅加载第 7 页的请求(带 page=7&size=20)
- 请求成功后,把结果写入 pages[7],并合并到整体列表状态中
若响应为空或 total 变更(比如后台数据被删),需同步更新 total,并清空 pages[8] 及之后所有页——防止展示过期数据。
支持历史跳转与刷新恢复
用户点浏览器后退/前进,或刷新页面,仍要秒级回到之前位置:
- 每次有效翻页或筛选变更,向 history 栈 push 轻量记录:{ cacheKey, page }(不存数据本身)
- 浏览器导航触发时,立即从 Store 中取 state[cacheKey].pages[page] 渲染
- 页面卸载前,用 localStorage 或 pinia-persist 插件保存当前 { cacheKey, page };刷新后自动 restore,并按需补拉缺失页
处理边界与并发安全
真实场景中要注意这些细节: - 用户手动输入跳转页码(如直接输“999”)→ 先显示 loading,请求该页;成功后再决定是否懒加载中间页(可配开关) - 点击「重置筛选」→ 清空全部 cacheKey 缓存,但保留全局配置(如默认 pageSize) - 多个分页区域共存(如订单列表 + 操作日志)→ 各自生成独立 cacheKey,Store action 加模块前缀或命名空间隔离,避免交叉污染


















