Skip to content

Commit 98f8775

Browse files
committed
infinite queries
1 parent 2ce0e33 commit 98f8775

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import axios from 'axios'
2+
import { FC, Fragment } from 'react'
3+
import { useInfiniteQuery } from 'react-query'
4+
5+
interface Props {}
6+
7+
const fetchColors = ({ pageParam = 1 }) => {
8+
return axios.get(`http://localhost:4000/colors?_limit=2&_page=${pageParam}`)
9+
}
10+
11+
const InfiniteQueries: FC<Props> = (props: Props) => {
12+
const { data, isLoading, isError, error, hasNextPage, fetchNextPage, isFetching, isFetchingNextPage } =
13+
useInfiniteQuery(['colors'], fetchColors, {
14+
getNextPageParam: (_lastPage, pages) => {
15+
if (pages.length < 4) {
16+
return pages.length + 1
17+
} else {
18+
return undefined
19+
}
20+
},
21+
})
22+
23+
if (isLoading) {
24+
return <h2>Loading...</h2>
25+
}
26+
27+
if (isError && error instanceof Error) {
28+
return <h2>{error.message}</h2>
29+
}
30+
return (
31+
<div className="paginated-queries">
32+
<h1>Infinite queries</h1>
33+
{data?.pages.map((group, index: number) => (
34+
<Fragment key={index}>
35+
{group.data.map((color: { id: number; label: string }, index: number) => (
36+
<h2 key={index}>
37+
{color.id}. {color.label}
38+
</h2>
39+
))}
40+
</Fragment>
41+
))}
42+
<button onClick={() => fetchNextPage()} disabled={!hasNextPage}>
43+
Load more
44+
</button>
45+
<div>{isFetching && !isFetchingNextPage ? 'Fetching...' : null}</div>
46+
</div>
47+
)
48+
}
49+
50+
export default InfiniteQueries

src/routes/Routes.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import ParallelQueries from 'pages/ParallelQueries/ParallelQueries'
1010
import DynamicParallelQueries from 'pages/DynamicParallelQueries/DynamicParallelQueries'
1111
import DependentQueries from 'pages/DependentQueries/DependentQueries'
1212
import PaginatedQueries from 'pages/PaginatedQueries/PaginatedQueries'
13+
import InfiniteQueries from 'pages/InfiniteQueries/InfiniteQueries'
1314

1415
export enum RouteType {
1516
PUBLIC,
@@ -63,6 +64,11 @@ export const AppRoutes: AppRoute[] = [
6364
path: '/paginated-queries',
6465
children: <PaginatedQueries />,
6566
},
67+
{
68+
type: RouteType.PUBLIC,
69+
path: '/infinite-queries',
70+
children: <InfiniteQueries />,
71+
},
6672
]
6773

6874
const Routes: FC = () => {

0 commit comments

Comments
 (0)