@tanstack/react-query 5.56.2 → 5.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -42,7 +42,14 @@ const fetchItems = async (
42
42
 
43
43
  describe('useInfiniteQuery', () => {
44
44
  const queryCache = new QueryCache()
45
- const queryClient = createQueryClient({ queryCache })
45
+ const queryClient = createQueryClient({
46
+ queryCache,
47
+ defaultOptions: {
48
+ queries: {
49
+ experimental_prefetchInRender: true,
50
+ },
51
+ },
52
+ })
46
53
 
47
54
  it('should return the correct states for a successful query', async () => {
48
55
  const key = queryKey()
@@ -97,6 +104,7 @@ describe('useInfiniteQuery', () => {
97
104
  refetch: expect.any(Function),
98
105
  status: 'pending',
99
106
  fetchStatus: 'fetching',
107
+ promise: expect.any(Promise),
100
108
  })
101
109
 
102
110
  expect(states[1]).toEqual({
@@ -132,6 +140,7 @@ describe('useInfiniteQuery', () => {
132
140
  refetch: expect.any(Function),
133
141
  status: 'success',
134
142
  fetchStatus: 'idle',
143
+ promise: expect.any(Promise),
135
144
  })
136
145
  })
137
146
 
@@ -1778,4 +1787,71 @@ describe('useInfiniteQuery', () => {
1778
1787
 
1779
1788
  await waitFor(() => rendered.getByText('data: custom client'))
1780
1789
  })
1790
+
1791
+ it('should work with React.use()', async () => {
1792
+ const key = queryKey()
1793
+
1794
+ let pageRenderCount = 0
1795
+ let suspenseRenderCount = 0
1796
+
1797
+ function Loading() {
1798
+ suspenseRenderCount++
1799
+ return <>loading...</>
1800
+ }
1801
+ function MyComponent() {
1802
+ const fetchCountRef = React.useRef(0)
1803
+ const query = useInfiniteQuery({
1804
+ queryFn: ({ pageParam }) =>
1805
+ fetchItems(pageParam, fetchCountRef.current++),
1806
+ getNextPageParam: (lastPage) => lastPage.nextId,
1807
+ initialPageParam: 0,
1808
+ queryKey: key,
1809
+ })
1810
+ const data = React.use(query.promise)
1811
+ return (
1812
+ <>
1813
+ {data.pages.map((page, index) => (
1814
+ <React.Fragment key={page.ts}>
1815
+ <div>
1816
+ <div>Page: {index + 1}</div>
1817
+ </div>
1818
+ {page.items.map((item) => (
1819
+ <p key={item}>Item: {item}</p>
1820
+ ))}
1821
+ </React.Fragment>
1822
+ ))}
1823
+ <button onClick={() => query.fetchNextPage()}>fetchNextPage</button>
1824
+ </>
1825
+ )
1826
+ }
1827
+ function Page() {
1828
+ pageRenderCount++
1829
+ return (
1830
+ <React.Suspense fallback={<Loading />}>
1831
+ <MyComponent />
1832
+ </React.Suspense>
1833
+ )
1834
+ }
1835
+
1836
+ const rendered = renderWithClient(queryClient, <Page />)
1837
+ await waitFor(() => rendered.getByText('loading...'))
1838
+
1839
+ await waitFor(() => rendered.getByText('Page: 1'))
1840
+ await waitFor(() => rendered.getByText('Item: 1'))
1841
+
1842
+ expect(rendered.queryByText('Page: 2')).toBeNull()
1843
+ expect(pageRenderCount).toBe(1)
1844
+
1845
+ // click button
1846
+ fireEvent.click(rendered.getByRole('button', { name: 'fetchNextPage' }))
1847
+
1848
+ await waitFor(() => {
1849
+ expect(rendered.queryByText('Page: 2')).not.toBeNull()
1850
+ })
1851
+
1852
+ // Suspense doesn't trigger when fetching next page
1853
+ expect(suspenseRenderCount).toBe(1)
1854
+
1855
+ expect(pageRenderCount).toBe(1)
1856
+ })
1781
1857
  })