

Data fetching in React
Data fetching in React
useEffect


useEffect
-
useEffect
is a React Hook that lets you synchronize a component with an external system. - Welke andere hook kennen we al?

useEffect
-
useEffect
is a React Hook that lets you synchronize a component with an external system. - Welke andere hook kennen we al?
useState

useEffect
-
-
You can use an Effect to fetch data for your component.
-
Writing data fetching directly in Effects gets repetitive and makes it difficult to add optimizations like caching and server rendering later.
🤔
-

useEffect
-
Voordeel:
-
Geen kost voor extra dependency
-
-
Nadeel:
-
Syntax komt wat vreemd over
-
Geen features zoals caching of preloading
-

useEffect
useEffect(arg1, arg2)
- a
rg1:
functie die wordt uitgevoerd. Optioneel geeft deze functie een andere functie terug (cleanup functie) die uitgevoerd wordt vóóruseEffect
een volgende keer wordt uitgevoerd. -
arg2:
array van dependencies (= variabelen) waarbijuseEffect
opnieuw moet uitgevoerd worden wanneer ze veranderen.

useEffect
- Even demonstreren met SWAPI
-
Belangrijk (!): breng het ophalen (fetch) van data altijd onder in een aparte functie. Waarom?
- Separation of concerns
- Tests
-
Caveat (!): await is niet mogelijk in
useEffect
- Oplossing:
.then()
of declaratie
- Oplossing:
-
Belangrijk (!): breng het ophalen (fetch) van data altijd onder in een aparte functie. Waarom?

useEffect
- Argument 2 bepaalt wanneer
useEffect
opnieuw wordt uitgevoerd:- array met minstens 1 variabele
- wanneer één van de variabelen wijzigt
- leeg array
- nooit
- geen waarde (undefined)
- bij elke re-render
- array met minstens 1 variabele

useEffect
-
Vervolg oefening (repository) omtrent paginatie:
-
Deel 1:
- Wanneer de pagina wijzigt, haal dan de studentendata voor de juiste pagina op via Strapi's API
- Toon gewoon de naam en voornaam in een lijst
- Aantal items per pagina: 10
-
Deel 1:

useEffect
-
Vervolg oefening omtrent paginatie:
- Deel 1


useEffect
-
Vervolg oefening omtrent paginatie:
-
Deel 2
-
# pagina's is nog hard-coded op 86.
Maak dit dynamisch o.b.v. back-end response (meta.pagination.pageCount
)
-
# pagina's is nog hard-coded op 86.
-
Deel 2

useEffect
-
Vervolg oefening omtrent paginatie
- Deel 2


useEffect
-
Vervolg oefening omtrent paginatie:
-
Deel 3
-
Voeg een dropdown toe om het
aantal items per pagina te setten - Haal de data vervolgens op met het geselecteerde aantal items per pagina
-
Voeg een dropdown toe om het
-
Deel 3

useEffect
-
Vervolg oefening omtrent paginatie:
- Deel 3

Data fetching in React
TanStack Query


TanStack Query
-
Simplifies fetching and managing server data
in React applications- Open source
- Ontworpen door Tanner Linsley, vandaar TanStack
- React-versie wordt vaak React Query genoemd
- Bestaat ook voor Vue, Angular ...

TanStack Query
- Daarnaast ook nog:
- TanStack Form
- TanStack Table
- TanStack Router
- ...

TanStack Query
-
Data management on steroids
-
Caching
- Prefetching
- Auto refetching
- Window focus refetching
- Automatic retries
- Built-in loading states, error states ...
-
Caching

TanStack Query
-
Quick Start met SWAPI
- Stap 1: create + provide client
// Create a client
const queryClient = new QueryClient();
function App() {
return (
// Provide the client to your App
<QueryClientProvider client={queryClient}>
<Todos />
</QueryClientProvider>
)
}
render(<App />, document.getElementById('root'));

TanStack Query
-
Quick Start met SWAPI
- Stap 2: access client + execute query
function App() {
// ...
}
function MyComponent() {
// Access client
const queryClient = useQueryClient();
const { isPending, isError, data, error } = useQuery({
queryKey: ['swapiPeople'],
queryFn: getSwapiPeople
});
// This is where our UI logic will come
}
render(<App />, document.getElementById('root'));

TanStack Query
-
Quick Start met SWAPI
- Stap 3: onze UI logica toevoegen
function App() {
// ...
}
function MyComponent() {
// Access client + execute query here first ...
if (isPending) {
return <span>Loading...</span>
}
if (isError) {
return <span>Error: {error.message}</span>
}
// We can assume by this point that `isSuccess === true`
return (
<ul>
{data.map((people) => (
<li key={people.uid}>{people.name}</li>
))}
</ul>
);
}
render(<App />, document.getElementById('root'));

TanStack Query
-
Quick Start met SWAPI
- Laadscherm
- Error handling
- Allemaal in ± 30 lijnen code
- Caching?
staleTime
const { isPending, isError, data, error } = useQuery({
queryKey: ['swapiPeople'],
queryFn: getSwapiPeople,
staleTime: 5 * 1000
});
PGM4/4 - Data fetching in React
By kareldesmet
PGM4/4 - Data fetching in React
- 39