In React query currently I am making calls to an api, when there is an error, it shows the error however, when I change the state object to make a new call, it does show loading data but does not hide the error message? I have created an example i have added a button which would give an error message i.e
stackblitz example: https://stackblitz.com/edit/react-ts-6wugxj?file=index.tsx
import React from 'react';
import { render } from 'react-dom';
import { useQuery } from 'react-query';
import axios from 'axios';
import { QueryClient, QueryClientProvider } from 'react-query';
const App: React.FunctionComponent = () => {
const queryKey = 'getData';
const [number, setNumber] = React.useState(1)
const getData = async (): Promise<any> => {
await new Promise((resolve) => setTimeout(resolve, 1000));
const response = await axios
.get(`https://jsonplaceholder.typicode.com/posts/${number}`)
.then((res) => res.data);
return response;
};
const {
data: result,
isFetching,
status,
error,
refetch,
}: any = useQuery(queryKey, getData, {
refetchOnWindowFocus: false,
staleTime: 0,
cacheTime: 0,
refetchInterval: 0,
});
React.useEffect(() => {
refetch();
}, [number, refetch]);
return (
<div className="Container">
<button onClick={refetch}>Refetch query</button>
<button onClick={() => setNumber(() => 1)}>Get 1</button>
<button onClick={() => setNumber(() => 2)}>Get 2</button>
<button onClick={() => setNumber(() => 3)}>Get 3</button>
<button onClick={() => setNumber(() => 99999)}>Get 99999</button>
{status === 'error' && <div className="mt-5">{error.message}</div>}
{isFetching ? (
<div className="mt-5">Loading data ...</div>
) : (
<div>
{status === 'success' && (
<div>
{/* {result?.map((inner: any, index: number) => {
return <li key={index}>{inner.title}</li>;
})} */}
<p><strong>id:</strong> {result?.id}</p>
<p>{result?.title}</p>
</div>
)}
</div>
)}
</div>
);
};
const queryClient = new QueryClient();
render(
<QueryClientProvider client={queryClient}>
<App />
</QueryClientProvider>,
document.getElementById('root')
);