React Academy · Les

useQuery- en useMutation-hooks

Haal gegevens op met useQuery, voer mutaties uit met useMutation en handel laad-, fout- en datastatussen af

Les 3 van 413 stappen

useQuery- en useMutation-hooks is een gratis React Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject React Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus React Academy bevat in totaal 4 lessen.

Een query definiëren met gql

De gql-template-tag uit @apollo/client parseert een GraphQL-querytekenreeks tijdens het laden van de module naar een DocumentNode. Definieer query's buiten componenten: const GET_USERS = gql`query GetUsers { users { id name email } }`.

Let op: gebruik in productiecode tekenreeksen tussen enkele aanhalingstekens die door gql als een getagde template worden omwikkeld. De gql-tag accepteert de syntaxis van een template literal in JavaScript-broncode.

Retourwaarden van useQuery

useQuery(GET_USERS) retourneert { loading, error, data, refetch, fetchMore, networkStatus }. loading is true tijdens het eerste ophalen. error bevat eventuele GraphQL- of netwerkfouten. data bevat het queryresultaat dat overeenkomt met de querystructuur.

Controleer loading en error voordat je data benadert, zodat je voorkomt dat null-waarden worden weergegeven.

Patronen voor laad- en foutweergave

Geef een skeletoncomponent weer zolang loading true is. Geef een foutmelding weer als error is gedefinieerd (gebruik error.message voor de fouttekst). Geef de daadwerkelijke inhoud alleen weer wanneer data is gedefinieerd en loading false is.

Dit patroon met drie statussen (loading / error / data) is de standaardstructuur voor Apollo Client-componenten.

Querygegevens benaderen

Het data-object weerspiegelt de structuur van de GraphQL-query. Voor query { users { id name } } benader je data.users, een array met objecten van het type {id, name}. TypeScript-typen komen overeen als je graphql-codegen gebruikt om getypeerde hooks te genereren.

Zonder codegen is data getypeerd als any. Met codegen retourneert useQuery automatisch volledig getypeerde gegevens.

Variabelen in useQuery

Geef variabelen door als tweede argument: useQuery(GET_USER, { variables: { id: userId } }). De query wordt automatisch opnieuw uitgevoerd wanneer userId verandert, net als bij een afhankelijkheidsarray van useEffect.

Apollo Client slaat elke unieke combinatie van query + variabelen afzonderlijk in de cache op, dus GET_USER met id: "1" en GET_USER met id: "2" hebben onafhankelijke cache-items.

Een query overslaan

Geef skip: true op in de opties om te voorkomen dat de query wordt uitgevoerd: useQuery(GET_USER, { skip: !userId }). Apollo verstuurt geen verzoek wanneer skip true is; loading is false en data is undefined.

Dit is het Apollo-equivalent van de null-sleutel van SWR en de optie enabled: false van React Query.

Handmatig opnieuw ophalen

De functie refetch die door useQuery wordt geretourneerd, start ongeacht het fetchbeleid een netwerkverzoek. Roep refetch() aan na een gebruikersactie die de servergegevens mogelijk heeft gewijzigd, bijvoorbeeld na het verzenden van een formulier.

Geef nieuwe variabelen door aan refetch: refetch({ id: newId }) om de gegevens met andere parameters opnieuw op te halen.

Netwerkstatus volgen

Geef notifyOnNetworkStatusChange: true op in de opties om updates te ontvangen wanneer de netwerkstatus verandert (ophalen, opnieuw ophalen, periodiek opvragen enzovoort). Het veld networkStatus bevat een numerieke code uit de NetworkStatus-enum.

Zo kun je een subtiele indicator voor "verversen" tonen wanneer er op de achtergrond opnieuw gegevens worden opgehaald, zonder de huidige gegevens te verbergen.

Signatuur van useMutation

useMutation(CREATE_USER) retourneert [mutateFunction, { loading, error, data, reset }]. De mutatiefunctie wordt aangeroepen wanneer de gebruiker een formulier verzendt. De functie retourneert een Promise met { data, errors }.

Roep mutate({ variables: { name: 'Alice', email: 'alice@example.com' } }) aan om invoer aan de mutatie door te geven.

Terugbelfuncties onCompleted en onError

Geef onCompleted: (data) => navigate('/dashboard') en onError: (error) => showToast(error.message) door aan de opties van useMutation. Deze terugbelfuncties worden uitgevoerd nadat de mutatie is geslaagd of mislukt.

onCompleted ontvangt de resultaatgegevens van de mutatie en is handig om navigatie te starten, succesmeldingen weer te geven of formulieren te resetten.

Optimistisch resultaat in useMutation

De optie optimisticResponse in de mutate-aanroep schrijft onmiddellijk een synthetisch resultaat naar de cache voordat de server antwoordt. Apollo geeft de optimistische gegevens direct weer en vervangt ze door het echte serverantwoord zodra dat binnenkomt.

Als de mutatie mislukt, zet Apollo de cache automatisch terug naar de toestand van vóór de optimistische wijziging, zodat de interface consistent blijft.

De skip-optie van useQuery

Wat gebeurt er met een useQuery als skip: true wordt doorgegeven?

Samenvatting van de les

Definieer query's met de gql-tag, roep useQuery(QUERY, { variables, skip }) aan en verwerk de statussen loading/error/data. useMutation retourneert een triggerfunctie en een statusobject; roep deze aan met variabelen en verwerk de resultaten via onCompleted en onError. Optimistische resultaten werken de cache onmiddellijk bij en worden bij fouten automatisch teruggedraaid.

De skip-optie en het opnieuw ophalen op basis van variabelen verwerken voorwaardelijk en geparametriseerd laden van gegevens.

Gratis beginnen

Leer React met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
88
Lessen
324

Veelgestelde vragen

Is de les “useQuery- en useMutation-hooks” gratis?

Ja — de volledige tekst van “useQuery- en useMutation-hooks” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus React Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus React Academy bevat in totaal 4 lessen.

Wat leer ik in “useQuery- en useMutation-hooks”?

Haal gegevens op met useQuery, voer mutaties uit met useMutation en handel laad-, fout- en datastatussen af Je oefent met React Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met React Academy te beginnen?

Ervaring vooraf is niet nodig. React Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “useQuery- en useMutation-hooks”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over React Academy?

Ja. Elke les over React Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. GraphQL-basisprincipes voor React-ontwikkelaars
  2. Apollo Client instellen in React
  3. useQuery- en useMutation-hooks
  4. Apollo-cache: normalisatie en updates
← Terug naar React Academy