Sol*_*ole 13 javascript reactjs react-query
当我重新获取查询时,当我有 onClick 按钮时,它会进入“正在更新...”状态,但我希望重新获取查询并显示“正在加载...”状态。我的代码是:
https://stackblitz.com/edit/react-ts-jfq8ve?file=index.tsx
import React, { useEffect } 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 [value, setValue] = React.useState<number>(7);
const queryKey = 'getData';
const getData = async (): Promise<any> => {
await new Promise((resolve) => setTimeout(resolve, 1000));
const response = await axios
.get(`https://jsonplaceholder.typicode.com/todos`)
.then((res) => res.data);
return response;
};
const {
data: result,
status,
isRefetching,
error,
refetch,
}: any = useQuery(queryKey, getData, {
refetchOnWindowFocus: true,
staleTime: 0,
cacheTime: 0,
refetchInterval: 0,
});
useEffect(() => {
refetch();
}, [value, refetch]);
return (
<div className="Container">
<button onClick={() => setValue(prevValue => prevValue + 1 )}>Set value</button>
{isRefetching ? <p className="mt-3">Updating data...</p> : null}
{status === 'error' && <div className="mt-5">{error.message}</div>}
{status === 'loading' && <div className="mt-5">Loading data ...</div>}
{status === 'success' && (
<div>
{result?.map((inner: any, index: number) => {
return <li key={index}>{inner.title}</li>;
})}
</div>
)}
</div>
);
};
const queryClient = new QueryClient();
render(
<QueryClientProvider client={queryClient}>
<App />
</QueryClientProvider>,
document.getElementById('root')
);
Run Code Online (Sandbox Code Playgroud)
Rya*_* Ro 13
根据 Yozi 的回答,我删除了按钮useEffect
并添加了refetch
功能。onClick
const {
data: result,
isFetching,
status,
error,
refetch,
}: any = useQuery(queryKey, getData, {
refetchOnWindowFocus: true,
staleTime: 0,
cacheTime: 0,
refetchInterval: 0,
});
return (
<div className="Container">
<button onClick={refetch}>Refetch query</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>;
})}
</div>
)}
</div>
)}
</div>
);
};
Run Code Online (Sandbox Code Playgroud)
在线示例:https://stackblitz.com/edit/react-ts-j87pub? file=index.tsx
归档时间: |
|
查看次数: |
34969 次 |
最近记录: |