Category | Utilities |
---|---|
Export Size | 650 B |
Last Changed | 2 weeks ago |
Reactive offset pagination.
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, onPageChange: fetchData, onPageSizeChange: fetchData, })
This function also provides a renderless component version via the
@vueuse/components
package. Learn more about the usage.
<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>
Component event supported props event callback and event listener.
event listener:
<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>
or props event callback:
<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>
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
© 2019-present Anthony Fu
Licensed under the MIT License.
https://vueuse.org/core/useOffsetPagination/