Fetching data
- 2 tools
- Axios: Fetching, de netwerk requests
- TanStack query: Caching, integratie met react, automatisch refetchen, ...
- Alles wordt standaard als verouderd beschouwd als de data opgehaald is
- Niet langer actieve queries worden 5 minuten in cache bewaard
- Data wordt gefetcht als het tabblad terug in focus komt
pnpm add axios @tanstack/react-query
Axios
const client = axios.create({
baseURL: 'BASIS URL WAARMEE ELK REQUEST BEGINT'
})
const fetchSomething = async (someParam) => {
await new Promise((resolve) => setTimeout(() => resolve(), 500))
return client.get(someURLToAppendToBaseURL, {
params: {
param1: value,
param2: value
}
})
}
TanStack Query config
- Verwacht een context provider met een queryClient
- Configuratie van de query, hoe lang cachen, wanneer refetchen, ...
- Configuratie kan op query niveau overschreven worden
- suspense: Gebruik suspense om een loading component te tonen terwijl data opgehaald wordt
- useErrorBoundary: Standaard true met suspense, gebruik een component die runtime errors opvangt
- refetchOnWindowFocus: Ververs data als het tabblad opnieuw focus krijgt
TanStack Query config
import {QueryClient, QueryClientProvider} from '@tanstack/react-query'
const queryClient = new QueryClient({
defaultOptions: {
queries: {
suspense: true,
useErrorBoundary: false,
refetchOnWindowFocus: import.meta.env.PROD,
}
}
})
root.render(
<QueryClientProvider client={queryClient}>
<App/>
</QueryClientProvider>
)
TanStack Query gebruiken
const someComponent = () => {
const {data, isSuccess, isError, isFetching} = useQuery(
['some', 'unique', 'key'],
async () => (await someAxiosFetchFunction()).data,
{
enabled: someBooleanIndicatingIfTheQueryShouldBeRun,
stateTime: howLongBeforeTheQueryIsStaleInMs,
cacheTime: howLongShowTheQueryResultBeCachedInMs,
refetchInterfal: howOftenShouldTheQueryRefreshTheResults
}
)
return <SomeComponentThatShowsTheData data={data}/>
}