Skip to content

usePagination

usePagination 是为传统分页列表场景设计的 Hook,负责处理 页码、总数、加载状态 等逻辑,让你专注于渲染表格或列表。

基础用法

usePagination 传统列表分页

返回值

typescript
const result = usePagination<TData, TParams>(service, options)
字段类型说明
currentRef<number>当前页码
pageSizeRef<number>每页条数
totalRef<number>总记录数
totalPagesRef<number>总页数
dataShallowRef<TData | undefined>接口返回数据(通常含 listtotal
loadingRef<boolean>加载中
refreshingRef<boolean>刷新中
loadingMoreRef<boolean>加载更多中(与其他 Hook 联动时使用)
errorShallowRef<unknown>错误
paramsRef<TParams>额外参数
noMoreRef<boolean>是否没有更多数据
pagination.loadPage(page)(page: number) => void加载指定页
pagination.nextPage()() => void下一页
pagination.prevPage()() => void上一页
pagination.firstPage()() => void首页
pagination.lastPage()() => void末页
pagination.refresh()() => void以当前页刷新
pagination.setPageSize(size)(size: number) => void修改每页条数并自动刷新(非 manual 模式)
pagination.setTotal(total)(total: number) => void手动设置总数

选项

usePagination(service, options) 的第一个参数为请求函数 service(page, pageSize, ...args),第二个参数为配置项:

typescript
interface UsePaginationOptions<TData, TParams extends unknown[]> {
  defaultPagination?: PaginationOptions // 默认分页参数 { current, pageSize }
  request?: Request // 自定义请求实例(预留)
  onSuccess?: (data: TData, params: TParams) => void
  onError?: (error: unknown, params: TParams) => void
  onFinally?: (params: TParams) => void
  manual?: boolean // 是否手动触发首次加载
  defaultParams?: TParams // 除 page、pageSize 外的额外参数,如 keyword
}

service 的前两个参数固定为 (current, pageSize),后续参数可通过 defaultParams / 手动修改 params 传入。

与 useRequest 的区别

  • useRequest:更通用,适用于各种单次请求 / 防抖 / 节流 / SWR 等
  • usePagination:专门处理分页逻辑,更适合「列表 + 分页」这种典型场景

相关 Hook

Released under the MIT License.