@@ -1377,4 +1377,75 @@ describe('useQuery().promise', () => {
1377
1377
. observers . length ,
1378
1378
) . toBe ( 2 )
1379
1379
} )
1380
+
1381
+ it ( 'should handle enabled state changes with suspense' , async ( ) => {
1382
+ const key = queryKey ( )
1383
+ const renderStream = createRenderStream ( { snapshotDOM : true } )
1384
+ const queryFn = vi . fn ( async ( ) => {
1385
+ await sleep ( 1 )
1386
+ return 'test'
1387
+ } )
1388
+
1389
+ function MyComponent ( props : { enabled : boolean } ) {
1390
+ useTrackRenders ( )
1391
+ const query = useQuery ( {
1392
+ queryKey : key ,
1393
+ queryFn,
1394
+ enabled : props . enabled ,
1395
+ staleTime : Infinity ,
1396
+ } )
1397
+
1398
+ const data = React . use ( query . promise )
1399
+ return < > { data } </ >
1400
+ }
1401
+
1402
+ function Loading ( ) {
1403
+ useTrackRenders ( )
1404
+ return < > loading..</ >
1405
+ }
1406
+
1407
+ function Page ( ) {
1408
+ useTrackRenders ( )
1409
+ const enabledState = React . useState ( false )
1410
+ const enabled = enabledState [ 0 ]
1411
+ const setEnabled = enabledState [ 1 ]
1412
+
1413
+ return (
1414
+ < div >
1415
+ < button onClick = { ( ) => setEnabled ( true ) } > enable</ button >
1416
+ < React . Suspense fallback = { < Loading /> } >
1417
+ < MyComponent enabled = { enabled } />
1418
+ </ React . Suspense >
1419
+ </ div >
1420
+ )
1421
+ }
1422
+
1423
+ const rendered = await renderStream . render (
1424
+ < QueryClientProvider client = { queryClient } >
1425
+ < Page />
1426
+ </ QueryClientProvider > ,
1427
+ )
1428
+
1429
+ {
1430
+ const result = await renderStream . takeRender ( )
1431
+ result . withinDOM ( ) . getByText ( 'loading..' )
1432
+ }
1433
+
1434
+ expect ( queryFn ) . toHaveBeenCalledTimes ( 0 )
1435
+ rendered . getByText ( 'enable' ) . click ( )
1436
+
1437
+ {
1438
+ const result = await renderStream . takeRender ( )
1439
+ result . withinDOM ( ) . getByText ( 'loading..' )
1440
+ }
1441
+
1442
+ expect ( queryFn ) . toHaveBeenCalledTimes ( 1 )
1443
+
1444
+ {
1445
+ const result = await renderStream . takeRender ( )
1446
+ result . withinDOM ( ) . getByText ( 'test' )
1447
+ }
1448
+
1449
+ expect ( queryFn ) . toHaveBeenCalledTimes ( 1 )
1450
+ } )
1380
1451
} )
0 commit comments