@tanstack/react-query 4.13.0 → 4.13.5
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/react-query",
|
|
3
|
-
"version": "4.13.
|
|
3
|
+
"version": "4.13.5",
|
|
4
4
|
"description": "Hooks for managing, caching and syncing asynchronous and remote data in React",
|
|
5
5
|
"author": "tannerlinsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"react-error-boundary": "^3.1.4"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@tanstack/query-core": "4.13.
|
|
49
|
+
"@tanstack/query-core": "4.13.4",
|
|
50
50
|
"use-sync-external-store": "^1.2.0"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
@@ -401,30 +401,33 @@ describe('useQuery', () => {
|
|
|
401
401
|
|
|
402
402
|
it('should set isFetchedAfterMount to true after a query has been fetched', async () => {
|
|
403
403
|
const key = queryKey()
|
|
404
|
-
const states: UseQueryResult<string>[] = []
|
|
405
404
|
|
|
406
405
|
await queryClient.prefetchQuery(key, () => 'prefetched')
|
|
407
406
|
|
|
408
407
|
function Page() {
|
|
409
|
-
const
|
|
410
|
-
|
|
411
|
-
return
|
|
408
|
+
const result = useQuery(key, () => 'new data')
|
|
409
|
+
|
|
410
|
+
return (
|
|
411
|
+
<>
|
|
412
|
+
<div>data: {result.data}</div>
|
|
413
|
+
<div>isFetched: {result.isFetched ? 'true' : 'false'}</div>
|
|
414
|
+
<div>
|
|
415
|
+
isFetchedAfterMount: {result.isFetchedAfterMount ? 'true' : 'false'}
|
|
416
|
+
</div>
|
|
417
|
+
</>
|
|
418
|
+
)
|
|
412
419
|
}
|
|
413
420
|
|
|
414
|
-
renderWithClient(queryClient, <Page />)
|
|
421
|
+
const rendered = renderWithClient(queryClient, <Page />)
|
|
415
422
|
|
|
416
|
-
|
|
417
|
-
|
|
423
|
+
rendered.getByText('data: prefetched')
|
|
424
|
+
rendered.getByText('isFetched: true')
|
|
425
|
+
rendered.getByText('isFetchedAfterMount: false')
|
|
418
426
|
|
|
419
|
-
|
|
420
|
-
data: '
|
|
421
|
-
isFetched: true
|
|
422
|
-
isFetchedAfterMount:
|
|
423
|
-
})
|
|
424
|
-
expect(states[1]).toMatchObject({
|
|
425
|
-
data: 'data',
|
|
426
|
-
isFetched: true,
|
|
427
|
-
isFetchedAfterMount: true,
|
|
427
|
+
await waitFor(() => {
|
|
428
|
+
rendered.getByText('data: new data')
|
|
429
|
+
rendered.getByText('isFetched: true')
|
|
430
|
+
rendered.getByText('isFetchedAfterMount: true')
|
|
428
431
|
})
|
|
429
432
|
})
|
|
430
433
|
|
|
@@ -601,7 +604,8 @@ describe('useQuery', () => {
|
|
|
601
604
|
|
|
602
605
|
const rendered = renderWithClient(queryClient, <Page />)
|
|
603
606
|
|
|
604
|
-
|
|
607
|
+
rendered.getByText('status: loading, fetchStatus: fetching')
|
|
608
|
+
|
|
605
609
|
await queryClient.cancelQueries(key)
|
|
606
610
|
// query cancellation will reset the query to it's initial state
|
|
607
611
|
await waitFor(() =>
|
|
@@ -869,20 +873,35 @@ describe('useQuery', () => {
|
|
|
869
873
|
|
|
870
874
|
states.push(state)
|
|
871
875
|
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
setActTimeout(() => {
|
|
876
|
-
remove()
|
|
877
|
-
rerender({})
|
|
878
|
-
}, 20)
|
|
879
|
-
}, [remove])
|
|
876
|
+
return (
|
|
877
|
+
<>
|
|
878
|
+
<div>{state.data}</div>
|
|
880
879
|
|
|
881
|
-
|
|
880
|
+
<button
|
|
881
|
+
onClick={() => {
|
|
882
|
+
state.remove()
|
|
883
|
+
rerender({})
|
|
884
|
+
}}
|
|
885
|
+
>
|
|
886
|
+
remove
|
|
887
|
+
</button>
|
|
888
|
+
</>
|
|
889
|
+
)
|
|
882
890
|
}
|
|
883
891
|
|
|
884
|
-
renderWithClient(queryClient, <Page />)
|
|
892
|
+
const rendered = renderWithClient(queryClient, <Page />)
|
|
885
893
|
|
|
894
|
+
await waitFor(() => {
|
|
895
|
+
rendered.getByText('data')
|
|
896
|
+
})
|
|
897
|
+
|
|
898
|
+
fireEvent.click(rendered.getByRole('button', { name: 'remove' }))
|
|
899
|
+
|
|
900
|
+
await waitFor(() => {
|
|
901
|
+
rendered.getByText('data')
|
|
902
|
+
})
|
|
903
|
+
|
|
904
|
+
// required to make sure no additional renders are happening after data is successfully fetched for the second time
|
|
886
905
|
await sleep(100)
|
|
887
906
|
|
|
888
907
|
expect(states.length).toBe(5)
|
|
@@ -1514,17 +1533,27 @@ describe('useQuery', () => {
|
|
|
1514
1533
|
|
|
1515
1534
|
states.push(state)
|
|
1516
1535
|
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
setCount(1)
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1536
|
+
return (
|
|
1537
|
+
<div>
|
|
1538
|
+
<button onClick={() => setCount(1)}>increment</button>
|
|
1539
|
+
<div>data: {state.data ?? 'undefined'}</div>
|
|
1540
|
+
<div>count: {count}</div>
|
|
1541
|
+
</div>
|
|
1542
|
+
)
|
|
1524
1543
|
}
|
|
1525
1544
|
|
|
1526
|
-
renderWithClient(queryClient, <Page />)
|
|
1545
|
+
const rendered = renderWithClient(queryClient, <Page />)
|
|
1546
|
+
|
|
1547
|
+
await waitFor(() => rendered.getByText('data: 0'))
|
|
1548
|
+
|
|
1549
|
+
fireEvent.click(rendered.getByRole('button', { name: /increment/i }))
|
|
1527
1550
|
|
|
1551
|
+
await waitFor(() => {
|
|
1552
|
+
rendered.getByText('count: 1')
|
|
1553
|
+
rendered.getByText('data: undefined')
|
|
1554
|
+
})
|
|
1555
|
+
|
|
1556
|
+
// making sure no additional fetches are triggered
|
|
1528
1557
|
await sleep(50)
|
|
1529
1558
|
|
|
1530
1559
|
expect(states.length).toBe(3)
|
|
@@ -1808,26 +1837,41 @@ describe('useQuery', () => {
|
|
|
1808
1837
|
|
|
1809
1838
|
states.push(state)
|
|
1810
1839
|
|
|
1811
|
-
|
|
1840
|
+
return (
|
|
1841
|
+
<div>
|
|
1842
|
+
<button onClick={() => state.refetch()}>refetch</button>
|
|
1843
|
+
<button onClick={() => setCount(1)}>setCount</button>
|
|
1844
|
+
<div>data: {state.data ?? 'undefined'}</div>
|
|
1845
|
+
</div>
|
|
1846
|
+
)
|
|
1847
|
+
}
|
|
1812
1848
|
|
|
1813
|
-
|
|
1814
|
-
refetch()
|
|
1849
|
+
const rendered = renderWithClient(queryClient, <Page />)
|
|
1815
1850
|
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1851
|
+
await waitFor(() => {
|
|
1852
|
+
rendered.getByText('data: undefined')
|
|
1853
|
+
})
|
|
1819
1854
|
|
|
1820
|
-
|
|
1821
|
-
refetch()
|
|
1822
|
-
}, 30)
|
|
1823
|
-
}, [refetch])
|
|
1855
|
+
fireEvent.click(rendered.getByRole('button', { name: 'refetch' }))
|
|
1824
1856
|
|
|
1825
|
-
|
|
1826
|
-
|
|
1857
|
+
await waitFor(() => {
|
|
1858
|
+
rendered.getByText('data: 0')
|
|
1859
|
+
})
|
|
1827
1860
|
|
|
1828
|
-
|
|
1861
|
+
fireEvent.click(rendered.getByRole('button', { name: 'setCount' }))
|
|
1829
1862
|
|
|
1830
|
-
await
|
|
1863
|
+
await waitFor(() => {
|
|
1864
|
+
rendered.getByText('data: 0')
|
|
1865
|
+
})
|
|
1866
|
+
|
|
1867
|
+
fireEvent.click(rendered.getByRole('button', { name: 'refetch' }))
|
|
1868
|
+
|
|
1869
|
+
await waitFor(() => {
|
|
1870
|
+
rendered.getByText('data: 1')
|
|
1871
|
+
})
|
|
1872
|
+
|
|
1873
|
+
// making sure no additional renders are triggered
|
|
1874
|
+
await sleep(20)
|
|
1831
1875
|
|
|
1832
1876
|
expect(states.length).toBe(6)
|
|
1833
1877
|
|
|
@@ -2190,19 +2234,31 @@ describe('useQuery', () => {
|
|
|
2190
2234
|
|
|
2191
2235
|
states.push(state)
|
|
2192
2236
|
|
|
2193
|
-
|
|
2237
|
+
return (
|
|
2238
|
+
<>
|
|
2239
|
+
<button
|
|
2240
|
+
onClick={async () => {
|
|
2241
|
+
await state.refetch()
|
|
2242
|
+
}}
|
|
2243
|
+
>
|
|
2244
|
+
refetch
|
|
2245
|
+
</button>
|
|
2194
2246
|
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
}, 10)
|
|
2199
|
-
}, [refetch])
|
|
2200
|
-
return null
|
|
2247
|
+
<div>{state.data}</div>
|
|
2248
|
+
</>
|
|
2249
|
+
)
|
|
2201
2250
|
}
|
|
2202
2251
|
|
|
2203
|
-
renderWithClient(queryClient, <Page />)
|
|
2252
|
+
const rendered = renderWithClient(queryClient, <Page />)
|
|
2204
2253
|
|
|
2205
|
-
await
|
|
2254
|
+
await waitFor(() => {
|
|
2255
|
+
rendered.getByText('test')
|
|
2256
|
+
})
|
|
2257
|
+
|
|
2258
|
+
fireEvent.click(rendered.getByRole('button', { name: 'refetch' }))
|
|
2259
|
+
|
|
2260
|
+
// sleep is required to make sure no additional renders happen after click
|
|
2261
|
+
await sleep(20)
|
|
2206
2262
|
|
|
2207
2263
|
expect(states.length).toBe(2)
|
|
2208
2264
|
expect(states[0]).toMatchObject({
|
|
@@ -2286,15 +2342,22 @@ describe('useQuery', () => {
|
|
|
2286
2342
|
}
|
|
2287
2343
|
|
|
2288
2344
|
function Page() {
|
|
2289
|
-
useQuery(key, queryFn)
|
|
2290
|
-
useQuery(key, queryFn)
|
|
2345
|
+
const query1 = useQuery(key, queryFn)
|
|
2346
|
+
const query2 = useQuery(key, queryFn)
|
|
2291
2347
|
renders++
|
|
2292
|
-
|
|
2348
|
+
|
|
2349
|
+
return (
|
|
2350
|
+
<div>
|
|
2351
|
+
{query1.data} {query2.data}
|
|
2352
|
+
</div>
|
|
2353
|
+
)
|
|
2293
2354
|
}
|
|
2294
2355
|
|
|
2295
|
-
renderWithClient(queryClient, <Page />)
|
|
2356
|
+
const rendered = renderWithClient(queryClient, <Page />)
|
|
2296
2357
|
|
|
2297
|
-
await
|
|
2358
|
+
await waitFor(() => {
|
|
2359
|
+
rendered.getByText('data data')
|
|
2360
|
+
})
|
|
2298
2361
|
|
|
2299
2362
|
// Should be 2 instead of 3
|
|
2300
2363
|
expect(renders).toBe(2)
|