useSuspenseInfiniteQuery(...)
The Hook enables you to perform asynchronous data fetching operations with support for infinite scrolling scenarios. The functionality is similar to the useInfiniteQuery hook, but with the added benefit of Suspense support. For more detailed information, explore useSuspenseInfiniteQuery(...) 🌴 documentation for more details.
const query = api.<service>.<operation>.useSuspenseInfiniteQuery(
parameters,
suspenseInfiniteQueryOptions
)
Arguments​
-
parameters: { path, query, header } | QueryKey | undefined- Required only if OpenAPI specification defines required parameters
- If the operation has no required parameters according to OpenAPI, you can omit this argument
parameterswill be used to generate theQueryKey- Instead of an object with
{path, query, header}, you can pass aQueryKeyas an array which is also strictly-typed ✨ - If operation does not require parameters, you must pass an empty object
{}for strictness
-
suspenseInfiniteQueryOptions?: UseSuspenseInfiniteQueryOptions- Optional, represents the options of the
useSuspenseInfiniteQuery(...) 🌴
Hook
queryOptions.queryFncould be provided to override the defaultqueryFnused by Qraft
- Optional, represents the options of the
useSuspenseInfiniteQuery(...) 🌴
Hook
Returns​
Same object as UseInfiniteQueryResult object, except that:
datais guaranteed to be definedisPlaceholderDatais missingstatusis always success- the derived flags are set accordingly.
See the TanStack useSuspenseInfiniteQuery(...) 🌴 documentation for more details.
By default, useSuspenseInfiniteQuery hooks are only generated for read operations (GET method). If you want to use query
hooks for write operations (POST, PUT, PATCH methods), use the --queryable-write-operations CLI option
during code generation.
Examples​
import { Suspense } from 'react';
import { createAPIClient } from './api'; // generated by OpenAPI Qraft CLI
import { requestFn } from '@openapi-qraft/react';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
const queryClient = new QueryClient();
const api = createAPIClient({
requestFn,
queryClient,
baseUrl: 'https://api.sandbox.monite.com/v1',
});
function PostList() {
/**
* `api.posts.getPosts.useSuspenseInfiniteQuery(...)` launches the initial fetch operation:
* ###
* GET /posts?limit=10&page=1
*/
const infiniteQuery = api.posts.getPosts.useSuspenseInfiniteQuery(
{ 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: GET /posts?limit=10&page=2
infiniteQuery.fetchNextPage()
}}>
Load More
</button>
</div>
);
}
export default function() {
return (
<QueryClientProvider client={queryClient}>
<Suspense fallback={<div>Loading...</div>}>
<PostList />
</Suspense>
</QueryClientProvider>
);
}