@tanstack/react-query 5.56.1 → 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.
- package/build/legacy/types.cjs.map +1 -1
- package/build/legacy/types.d.cts +2 -2
- package/build/legacy/types.d.ts +2 -2
- package/build/legacy/useBaseQuery.cjs +19 -3
- package/build/legacy/useBaseQuery.cjs.map +1 -1
- package/build/legacy/useBaseQuery.d.cts +1 -1
- package/build/legacy/useBaseQuery.d.ts +1 -1
- package/build/legacy/useBaseQuery.js +22 -5
- package/build/legacy/useBaseQuery.js.map +1 -1
- package/build/modern/types.cjs.map +1 -1
- package/build/modern/types.d.cts +2 -2
- package/build/modern/types.d.ts +2 -2
- package/build/modern/useBaseQuery.cjs +18 -2
- package/build/modern/useBaseQuery.cjs.map +1 -1
- package/build/modern/useBaseQuery.d.cts +1 -1
- package/build/modern/useBaseQuery.d.ts +1 -1
- package/build/modern/useBaseQuery.js +21 -4
- package/build/modern/useBaseQuery.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/prefetch.test.tsx +10 -1
- package/src/__tests__/ssr.test.tsx +4 -2
- package/src/__tests__/suspense.test.tsx +0 -1
- package/src/__tests__/useInfiniteQuery.test.tsx +77 -1
- package/src/__tests__/useQuery.test.tsx +793 -11
- package/src/types.ts +5 -2
- package/src/useBaseQuery.ts +28 -4
|
@@ -42,7 +42,14 @@ const fetchItems = async (
|
|
|
42
42
|
|
|
43
43
|
describe('useInfiniteQuery', () => {
|
|
44
44
|
const queryCache = new QueryCache()
|
|
45
|
-
const queryClient = createQueryClient({
|
|
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
|
})
|