Skip to content

useOffsetPagination

Category
Export Size
1.02 kB
Last Changed
7 months ago

Reactive offset pagination.

Demo

total:
80
pageCount:
8
currentPageSize:
10
currentPage:
1
isFirstPage:
true
isLastPage:
false
idname
0user 0
1user 1
2user 2
3user 3
4user 4
5user 5
6user 6
7user 7
8user 8
9user 9

Usage

ts
import { 
useOffsetPagination
} from '@vueuse/core'
function
fetchData
({
currentPage
,
currentPageSize
}: {
currentPage
: number,
currentPageSize
: number }) {
fetch
(
currentPage
,
currentPageSize
).
then
((
responseData
) => {
data.value =
responseData
}) } const {
currentPage
,
currentPageSize
,
pageCount
,
isFirstPage
,
isLastPage
,
prev
,
next
,
} =
useOffsetPagination
({
total
: database.value.length,
page
: 1,
pageSize
: 10,
onPageChange
:
fetchData
,
onPageSizeChange
:
fetchData
,
})
js
import { useOffsetPagination } from '@vueuse/core'
function fetchData({ currentPage, currentPageSize }) {
  fetch(currentPage, currentPageSize).then((responseData) => {
    data.value = responseData
  })
}
const {
  currentPage,
  currentPageSize,
  pageCount,
  isFirstPage,
  isLastPage,
  prev,
  next,
} = useOffsetPagination({
  total: database.value.length,
  page: 1,
  pageSize: 10,
  onPageChange: fetchData,
  onPageSizeChange: fetchData,
})

Component Usage

This function also provides a renderless component version via the @vueuse/components package. Learn more about the usage.

vue
<template>
  <UseOffsetPagination
    v-slot="{
      
currentPage
,
currentPageSize
,
next
,
prev
,
pageCount
,
isFirstPage
,
isLastPage
,
}"
:total
="database.length"
@
page-change
="fetchData"
@
page-size-change
="fetchData"
> <
div
class
="gap-x-4 gap-y-2 grid-cols-2 inline-grid items-center">
<
div
opacity
="50">
total: </
div
>
<
div
>{{ database.length }}</
div
>
<
div
opacity
="50">
pageCount: </
div
>
<
div
>{{
pageCount
}}</
div
>
<
div
opacity
="50">
currentPageSize: </
div
>
<
div
>{{
currentPageSize
}}</
div
>
<
div
opacity
="50">
currentPage: </
div
>
<
div
>{{
currentPage
}}</
div
>
<
div
opacity
="50">
isFirstPage: </
div
>
<
div
>{{
isFirstPage
}}</
div
>
<
div
opacity
="50">
isLastPage: </
div
>
<
div
>{{
isLastPage
}}</
div
>
</
div
>
<
div
>
<
button
:disabled
="
isFirstPage
" @
click
="
prev
">
prev </
button
>
<
button
:disabled
="
isLastPage
" @
click
="
next
">
next </
button
>
</
div
>
</UseOffsetPagination> </template>

Component event supported props event callback and event listener.

event listener:

vue
<template>
  <UseOffsetPagination
    v-slot="{
      
currentPage
,
currentPageSize
,
next
,
prev
,
pageCount
,
isFirstPage
,
isLastPage
,
}"
:total
="database.length"
@
page-change
="fetchData"
@
page-size-change
="fetchData"
@
page-count-change
="onPageCountChange"
> <!-- your code --> </UseOffsetPagination> </template>

or props event callback:

vue
<template>
  <UseOffsetPagination
    v-slot="{
      
currentPage
,
currentPageSize
,
next
,
prev
,
pageCount
,
isFirstPage
,
isLastPage
,
}"
:total
="database.length"
:on-page-change
="fetchData"
:on-page-size-change
="fetchData"
:on-page-count-change
="onPageCountChange"
> <!-- your code --> </UseOffsetPagination> </template>

Type Declarations

Show Type Declarations
ts
export interface UseOffsetPaginationOptions {
  /**
   * Total number of items.
   */
  
total
?:
MaybeRefOrGetter
<number>
/** * The number of items to display per page. * @default 10 */
pageSize
?:
MaybeRefOrGetter
<number>
/** * The current page number. * @default 1 */
page
?:
MaybeRef
<number>
/** * Callback when the `page` change. */
onPageChange
?: (
returnValue
:
UnwrapNestedRefs
<UseOffsetPaginationReturn>,
) => unknown /** * Callback when the `pageSize` change. */
onPageSizeChange
?: (
returnValue
:
UnwrapNestedRefs
<UseOffsetPaginationReturn>,
) => unknown /** * Callback when the `pageCount` change. */
onPageCountChange
?: (
returnValue
:
UnwrapNestedRefs
<UseOffsetPaginationReturn>,
) => unknown } export interface UseOffsetPaginationReturn {
currentPage
:
Ref
<number>
currentPageSize
:
Ref
<number>
pageCount
:
ComputedRef
<number>
isFirstPage
:
ComputedRef
<boolean>
isLastPage
:
ComputedRef
<boolean>
prev
: () => void
next
: () => void
} export type
UseOffsetPaginationInfinityPageReturn
=
Omit
<
UseOffsetPaginationReturn, "isLastPage" > export declare function
useOffsetPagination
(
options
:
Omit
<UseOffsetPaginationOptions, "total">,
):
UseOffsetPaginationInfinityPageReturn
export declare function
useOffsetPagination
(
options
: UseOffsetPaginationOptions,
): UseOffsetPaginationReturn

Source

SourceDemoDocs

Contributors

Anthony Fu
Anthony Fu
IlyaL
IlyaL
Doctorwu
LJX
vaakian X
JD Solanki
Curt Grimes
webfansplz
三咲智子
Jelf

Changelog

v14.0.0-alpha.0 on
8c521 - feat(components)!: refactor components and make them consistent (#4912)
v12.8.0 on
7432f - feat(types): deprecate MaybeRef and MaybeRefOrGetter in favor of Vue's native (#4636)
v12.3.0 on
59f75 - feat(toValue): deprecate toValue from @vueuse/shared in favor of Vue's native
v12.0.0-beta.1 on
0a9ed - feat!: drop Vue 2 support, optimize bundles and clean up (#4349)
v10.7.0 on
4dace - fix: don't mutate props when it's readonly (#3581)

Released under the MIT License.

Write AI-Powered code you can trust
Grab 45% off for AIDD Masterclass before it's gone.
Claim Now
04
hours
:
34
minutes
:
59
seconds
: