Vue3 uniApp 分页列表 Hook 封装 - usePaginationList
简介
usePaginationList 是一个用于处理分页列表数据的 Vue3 Composition API Hook。它封装了分页加载、状态管理、错误处理等常见逻辑。不仅适用于 Web 端,针对 UniApp 小程序 的下拉刷新和触底加载场景也做了适配。
功能特性
- ✅ 多端适配:支持 Web 及 UniApp 小程序
- ✅ 状态管理:内置 loading、noData (暂无数据)、pageEnd (到底了) 状态
- ✅ 筛选重置:支持传入搜索条件并自动重置分页
- ✅ 生命周期:支持
onSuccess和onError回调(常用于停止下拉刷新动画) - ✅ 灵活配置:可配置分页字段名、初始参数、是否立即加载等
参数说明
fetchFunction (必需)
数据请求函数,接收合并后的参数对象,返回 Promise。接口返回的数据结构应包含:
list或data.list: 列表数据数组total或data.total: 总条目数(可选)pages或data.pages: 总页数(可选)
options (可选)
配置对象,包含以下属性:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
pageSize |
number |
15 |
每页显示数量 |
immediate |
boolean |
true |
是否在初始化时立即执行一次加载 |
extraParams |
object |
{} |
固定的额外请求参数,会与分页参数合并 |
pageField |
string |
'current' |
后端接口分页参数:页码的字段名 |
pageSizeField |
string |
'limit' |
后端接口分页参数:每页数量的字段名 |
onSuccess |
function |
- | 请求成功时的回调函数 (可处理 uni.stopPullDownRefresh) |
onError |
function |
- | 请求失败时的回调函数 |
返回值
返回一个对象,包含以下属性和方法:
| 属性/方法 | 类型 | 说明 |
|---|---|---|
list |
Ref<Array> |
列表数据 |
loading |
Ref<boolean> |
是否处于加载状态 |
pageEnd |
Ref<boolean> |
是否已加载所有数据 |
noData |
Ref<boolean> |
是否无数据(第一页就没有数据) |
total |
Ref<number> |
数据总条目数 |
pages |
Ref<number> |
总页数 |
currentPage |
Ref<number> |
当前页码 |
error |
Ref<Error|null> |
错误对象 |
params |
Ref<object> |
当前请求的参数对象 |
getList |
function |
加载数据函数,可手动触发加载 |
reset |
function |
重置列表状态并重新加载数据 (常用于搜索) |
setPage |
function |
跳转到指定页并重新加载 |
使用示例 (UniApp + Wot Design)
以下示例展示了如何在 UniApp 组件中使用该 Hook,配合 wd-status-tip (缺省页) 和 wd-loadmore (加载更多),并暴露方法给父页面处理触底事件。
1 | <template> |
完整代码
1 | import { ref } from 'vue' |