infiniteQueryOptions
infiniteQueryOptions
는 Infinite Query에서 queryOptions를 활용할 수 있도록 도와줍니다. 이는 queryOptions
가 사용되는 이유와 유사한 장점을 제공합니다.
import { infiniteQueryOptions, useSuspenseInfiniteQuery, SuspenseInfiniteQuery } from '@suspensive/react-query'
import { useInfiniteQuery, useQueryClient } from '@tanstack/react-query'
const postsInfiniteQueryOptions = (page) =>
infiniteQueryOptions({
queryKey: ['posts', page] as const,
queryFn: ({
queryKey: [, page], // queryKey를 활용할 수 있습니다.
}) => fetch(`https://example.com/posts?page=${page}`).then(res => res.json()),
getNextPageParam: (lastPage) => lastPage.nextPage ?? false,
})
// 커스텀 쿼리 훅을 만들 필요가 없습니다.
// useInfiniteQuery, useSuspenseInfiniteQuery, SuspenseInfiniteQuery에서 직접 infiniteQueryOptions를 활용할 수 있습니다.
const postsQuery = useInfiniteQuery(postsInfiniteQueryOptions(1))
const { data: posts, fetchNextPage, hasNextPage } = useSuspenseInfiniteQuery({
...postsInfiniteQueryOptions(1),
refetchInterval: 2000, // 사용처에서 확장성을 명확히 표현됩니다.
})
const Example = () => (
<SuspenseInfiniteQuery {...postsInfiniteQueryOptions(1)}>
{({ data, fetchNextPage, hasNextPage }) => (
<div>
{data.pages.map((page, index) => (
<div key={index}>
{page.posts.map(post => (
<div key={post.id}>{post.title}</div>
))}
</div>
))}
<button onClick={() => fetchNextPage()} disabled={!hasNextPage}>
Load More
</button>
</div>
)}
</SuspenseInfiniteQuery>
)
// queryClient의 메소드에서 queryKey와 queryFn을 쉽게 활용할 수 있습니다.
const queryClient = useQueryClient()
queryClient.refetchQueries(postsInfiniteQueryOptions(1))
queryClient.prefetchQuery(postsInfiniteQueryOptions(1))
queryClient.invalidateQueries(postsInfiniteQueryOptions(1))
queryClient.fetchQuery(postsInfiniteQueryOptions(1))
queryClient.resetQueries(postsInfiniteQueryOptions(1))
queryClient.cancelQueries(postsInfiniteQueryOptions(1))
버전 기록
Version | Changes |
---|---|
v3.0.0 | networkMode 는 제거되었습니다. 자세한 내용은 v3로 마이그레이션하기 문서를 참고하세요. |
수정된 날짜: