---
category: Utilities
---
# useOffsetPagination
Reactive offset pagination.
## 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,
});
```
## Component Usage
```vue
total:
{{ database.length }}
pageCount:
{{ pageCount }}
currentPageSize:
{{ currentPageSize }}
currentPage:
{{ currentPage }}
isFirstPage:
{{ isFirstPage }}
isLastPage:
{{ isLastPage }}
```
Component event supported props event callback and event listener.
event listener:
```vue
```
or props event callback:
```vue
```
## Type Declarations
```ts
export interface UseOffsetPaginationOptions {
/**
* Total number of items.
*/
total?: MaybeRefOrGetter;
/**
* The number of items to display per page.
* @default 10
*/
pageSize?: MaybeRefOrGetter;
/**
* The current page number.
* @default 1
*/
page?: MaybeRef;
/**
* Callback when the `page` change.
*/
onPageChange?: (returnValue: UnwrapNestedRefs) => unknown;
/**
* Callback when the `pageSize` change.
*/
onPageSizeChange?: (returnValue: UnwrapNestedRefs) => unknown;
/**
* Callback when the `pageCount` change.
*/
onPageCountChange?: (returnValue: UnwrapNestedRefs) => unknown;
}
export interface UseOffsetPaginationReturn {
currentPage: Ref;
currentPageSize: Ref;
pageCount: ComputedRef;
isFirstPage: ComputedRef;
isLastPage: ComputedRef;
prev: () => void;
next: () => void;
}
export type UseOffsetPaginationInfinityPageReturn = Omit;
export declare function useOffsetPagination(
options: Omit,
): UseOffsetPaginationInfinityPageReturn;
export declare function useOffsetPagination(
options: UseOffsetPaginationOptions,
): UseOffsetPaginationReturn;
```