我有一个React应用程序,它使用SWR + Axios进行数据获取(https://swr.vercel.app/docs/data-fetching)。问题在于,我的自定义hook使用
我的应用程序包含在SWRConfig中:
抓取器被描述为:
useSwr
时,每当初始化钩子时都会获取所有数据。我的目标是仅在调用mutate
时获取数据。目前即使没有调用mutate
,初始获取也会发生。如何实现我的目标?我的应用程序包含在SWRConfig中:
<SWRConfig
value={{
fetcher,
}}
>
<App/>
</SWRConfig>
抓取器被描述为:
const dataFetch = (url) => axios.get(url).then((res) => res.data);
function fetcher(...urls: string[]) {
if (urls.length > 1) {
return Promise.all(urls.map(dataFetch));
}
return dataFetch(urls);
}
使用useSwr
的自定义钩子
import useSWR, { useSWRConfig } from "swr";
export function useCars(registrationPlates: number[]): ICars {
const { mutate } = useSWRConfig();
const { data: carData} = useSWR<Car[]>(
carsToFetchUrls(registrationPlates), // returns string array with urls to fetch
{
revalidateOnFocus: false,
revalidateOnMount: false,
revalidateOnReconnect: false,
refreshWhenOffline: false,
refreshWhenHidden: false,
refreshInterval: 0,
}
);
const getCar = (
carRegistrationPlate: number,
): Car => {
console.log(carData) // carData contains data from fetch even before calling mutate()
void mutate();
...
}
用法:(这将位于希望使用useCars
钩子的某个组件中)
const { getCar } = useCars(carsRegistrationPlates);