Skip to main content
Version: 1.x

useInfiniteQuery(...)

The Hook enables you to perform asynchronous data fetching operations with support for infinite scrolling scenarios. See the TanStack useInfiniteQuery(...) ๐ŸŒด documentation for more details.

const query = qraft.<service>.<operation>.useInfiniteQuery(
parameters,
infiniteQueryOptions,
queryClient,
)

Argumentsโ€‹

  1. parameters: { path, query, header } | QueryKey | {}

    • Required and strictly-typed โœจ parameters for the query
    • parameters will be used to generate the QueryKey
    • Instead of an object with {path, query, header}, you can pass a QueryKey as an array which is also strictly-typed โœจ
    • If operation does not require parameters, you must pass an empty object {} for strictness
  2. infiniteQueryOptions?: UseInfiniteQueryOptions

    • Optional, represents the options of the useInfiniteQuery(...) ๐ŸŒด Hook
      • queryOptions.queryFn could be provided to override the default queryFn used by Qraft
      • queryOptions.queryKey is not allowed, as it will be generated from parameters
  3. queryClient?: QueryClient

Returnsโ€‹

UseInfiniteQueryResult object, see the TanStack useInfiniteQuery(...) ๐ŸŒด documentation for more details.

Examplesโ€‹

src/PostList.tsx
import { createAPIClient } from './api'; // generated by OpenAPI Qraft CLI

const qraft = createAPIClient();

function PostList() {
/**
* `qraft.posts.getPosts.useInfiniteQuery(...)` launches
* the initial query to fetch the first page of posts:
* ###
* GET /posts?limit=10&page=1
*/
const infiniteQuery = qraft.posts.getPosts.useInfiniteQuery(
{ query: { limit: 10 } },
{
getNextPageParam: (lastPage, allPages, lastPageParams) => {
if (lastPage.length < 10) return; // if less than 10 items, there are no more pages
return {
query: {
page: Number(lastPageParams.query?.page) + 1,
},
};
},
initialPageParam: {
query: {
page: 1, // will be used in initial request
},
},
}
);

return (
<div>
{infiniteQuery.data?.pages.map((page, pageIndex) => (
<ul key={pageIndex}>
{page.map((post) => (
<li key={post.id}>{post.title}</li>
))}
</ul>
))}
<button onClick={() => {
// โฌ‡๏ธŽ Initiates a GET request for the next page of posts: /posts?limit=10&page=2
infiniteQuery.fetchNextPage()
}}>
Load More
</button>
</div>
);
}