@@ -891,6 +891,76 @@ describe("useQuery's in Suspense mode", () => {
891
891
consoleMock . mockRestore ( )
892
892
} )
893
893
894
+ it ( 'should error catched in error boundary without infinite loop when enabled changed' , async ( ) => {
895
+ const consoleMock = mockConsoleError ( )
896
+
897
+ const succeed = false
898
+
899
+ function Page ( ) {
900
+ const queryKeys = '1'
901
+ const [ enabled , setEnabled ] = React . useState ( false )
902
+
903
+ const result = useQuery (
904
+ [ queryKeys ] ,
905
+ async ( ) => {
906
+ await sleep ( 10 )
907
+ if ( ! succeed ) {
908
+ throw new Error ( 'Suspense Error Bingo' )
909
+ } else {
910
+ return 'data'
911
+ }
912
+ } ,
913
+ {
914
+ retry : false ,
915
+ suspense : true ,
916
+ enabled,
917
+ }
918
+ )
919
+ return (
920
+ < div >
921
+ < span > rendered</ span > < span > { result . data } </ span >
922
+ < button
923
+ aria-label = "fail"
924
+ onClick = { ( ) => {
925
+ setEnabled ( true )
926
+ } }
927
+ >
928
+ fail
929
+ </ button >
930
+ </ div >
931
+ )
932
+ }
933
+
934
+ function App ( ) {
935
+ const { reset } = useQueryErrorResetBoundary ( )
936
+ return (
937
+ < ErrorBoundary
938
+ onReset = { reset }
939
+ fallbackRender = { ( ) => < div > error boundary</ div > }
940
+ >
941
+ < React . Suspense fallback = "Loading..." >
942
+ < Page />
943
+ </ React . Suspense >
944
+ </ ErrorBoundary >
945
+ )
946
+ }
947
+
948
+ const rendered = renderWithClient ( queryClient , < App /> )
949
+
950
+ // render empty data with 'rendered' when enabled is false
951
+ await waitFor ( ( ) => rendered . getByText ( 'rendered' ) )
952
+
953
+ // change enabled to true
954
+ fireEvent . click ( rendered . getByLabelText ( 'fail' ) )
955
+
956
+ // render pending fallback
957
+ await waitFor ( ( ) => rendered . getByText ( 'Loading...' ) )
958
+
959
+ // render error boundary fallback (error boundary)
960
+ await waitFor ( ( ) => rendered . getByText ( 'error boundary' ) )
961
+ consoleMock . mockRestore ( )
962
+ } )
963
+
894
964
it ( 'should render the correct amount of times in Suspense mode when cacheTime is set to 0' , async ( ) => {
895
965
const key = queryKey ( )
896
966
let state : UseQueryResult < number > | null = null
0 commit comments