@@ -47,14 +47,15 @@ describe('usePaginatedQuery', () => {
4747 rendered . getByText ( 'Data 2' )
4848 await waitForElement ( ( ) => rendered . getByText ( 'Data 3' ) )
4949 } )
50+
5051 it ( 'should use initialData only on the first page, then use previous page data while fetching the next page' , async ( ) => {
5152 function Page ( ) {
5253 const [ page , setPage ] = React . useState ( 1 )
5354
5455 const { resolvedData } = usePaginatedQuery (
5556 [ 'data' , { page } ] ,
5657 async ( queryName , { page } ) => {
57- sleep ( 1000 )
58+ await sleep ( 1000 )
5859 return page
5960 } ,
6061 { initialData : 0 }
@@ -84,4 +85,40 @@ describe('usePaginatedQuery', () => {
8485 rendered . getByText ( 'Data 3' )
8586 await waitForElement ( ( ) => rendered . getByText ( 'Data 4' ) )
8687 } )
88+
89+ // See https://github.com/tannerlinsley/react-query/issues/169
90+ it ( 'should not trigger unnecessary loading state' , async ( ) => {
91+ function Page ( ) {
92+ const [ page , setPage ] = React . useState ( 1 )
93+
94+ const { resolvedData, status } = usePaginatedQuery (
95+ [ 'data' , { page } ] ,
96+ async ( queryName , { page } ) => {
97+ await sleep ( 1000 )
98+ return page
99+ } ,
100+ { initialData : 0 }
101+ )
102+
103+ return (
104+ < div >
105+ < h1 data-testid = "title" > Data { resolvedData } </ h1 >
106+ < h1 data-testid = "status" > { status } </ h1 >
107+ < button onClick = { ( ) => setPage ( page + 1 ) } > next</ button >
108+ </ div >
109+ )
110+ }
111+
112+ const rendered = render ( < Page /> )
113+
114+ rendered . getByText ( 'Data 0' )
115+
116+ fireEvent . click ( rendered . getByText ( 'next' ) )
117+ fireEvent . click ( rendered . getByText ( 'next' ) )
118+ fireEvent . click ( rendered . getByText ( 'next' ) )
119+
120+ await waitForElement ( ( ) => rendered . getByTestId ( 'status' ) )
121+ expect ( rendered . getByTestId ( 'status' ) . textContent ) . toBe ( 'success' )
122+ expect ( rendered . getByTestId ( 'status' ) . textContent ) . not . toBe ( 'loading' )
123+ } )
87124} )
0 commit comments