@@ -1797,6 +1797,90 @@ describe('useQuery', () => {
17971797 } )
17981798 } )
17991799
1800+ it ( 'should show placeholderData between multiple pending queries when select fn transform is used' , async ( ) => {
1801+ const key = queryKey ( )
1802+ const states : UseQueryResult < number > [ ] = [ ]
1803+
1804+ function Page ( ) {
1805+ const [ count , setCount ] = React . useState ( 0 )
1806+
1807+ const state = useQuery ( {
1808+ queryKey : [ key , count ] ,
1809+ queryFn : async ( ) => {
1810+ await sleep ( 10 )
1811+ return {
1812+ count,
1813+ }
1814+ } ,
1815+ select ( data ) {
1816+ return data . count
1817+ } ,
1818+ placeholderData : keepPreviousData ,
1819+ } )
1820+
1821+ states . push ( state )
1822+
1823+ return (
1824+ < div >
1825+ < div > data: { state . data } </ div >
1826+ < button onClick = { ( ) => setCount ( ( prev ) => prev + 1 ) } > setCount</ button >
1827+ </ div >
1828+ )
1829+ }
1830+
1831+ const rendered = renderWithClient ( queryClient , < Page /> )
1832+
1833+ await waitFor ( ( ) => rendered . getByText ( 'data: 0' ) )
1834+
1835+ fireEvent . click ( rendered . getByRole ( 'button' , { name : 'setCount' } ) )
1836+ fireEvent . click ( rendered . getByRole ( 'button' , { name : 'setCount' } ) )
1837+ fireEvent . click ( rendered . getByRole ( 'button' , { name : 'setCount' } ) )
1838+
1839+ await waitFor ( ( ) => rendered . getByText ( 'data: 3' ) )
1840+ // Initial
1841+ expect ( states [ 0 ] ) . toMatchObject ( {
1842+ data : undefined ,
1843+ isFetching : true ,
1844+ isSuccess : false ,
1845+ isPlaceholderData : false ,
1846+ } )
1847+ // Fetched
1848+ expect ( states [ 1 ] ) . toMatchObject ( {
1849+ data : 0 ,
1850+ isFetching : false ,
1851+ isSuccess : true ,
1852+ isPlaceholderData : false ,
1853+ } )
1854+ // Set state -> count = 1
1855+ expect ( states [ 2 ] ) . toMatchObject ( {
1856+ data : 0 ,
1857+ isFetching : true ,
1858+ isSuccess : true ,
1859+ isPlaceholderData : true ,
1860+ } )
1861+ // Set state -> count = 2
1862+ expect ( states [ 3 ] ) . toMatchObject ( {
1863+ data : 0 ,
1864+ isFetching : true ,
1865+ isSuccess : true ,
1866+ isPlaceholderData : true ,
1867+ } )
1868+ // Set state -> count = 3
1869+ expect ( states [ 4 ] ) . toMatchObject ( {
1870+ data : 0 ,
1871+ isFetching : true ,
1872+ isSuccess : true ,
1873+ isPlaceholderData : true ,
1874+ } )
1875+ // New data
1876+ expect ( states [ 5 ] ) . toMatchObject ( {
1877+ data : 3 ,
1878+ isFetching : false ,
1879+ isSuccess : true ,
1880+ isPlaceholderData : false ,
1881+ } )
1882+ } )
1883+
18001884 it ( 'should transition to error state when placeholderData is set' , async ( ) => {
18011885 const key = queryKey ( )
18021886 const states : UseQueryResult < number > [ ] = [ ]
0 commit comments