useQuery- und useMutation-Hooks
Daten mit useQuery abrufen, Mutationen mit useMutation ausführen und Lade-, Fehler- und Datenzustände behandeln
useQuery- und useMutation-Hooks ist eine kostenlose React Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des React Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.
Eine Query mit gql definieren
Der gql-Template-Tag aus @apollo/client parst eine GraphQL-Abfragezeichenfolge beim Laden des Moduls in einen DocumentNode. Definieren Sie Queries außerhalb von Komponenten: const GET_USERS = gql`query GetUsers { users { id name email } }`.
Beachten Sie: Verwenden Sie im Produktionscode von gql umschlossene Zeichenfolgen in einfachen Anführungszeichen als getaggtes Template. Der gql-Tag akzeptiert in JavaScript-Quelltext die Syntax eines Template-Literals.
Rückgabewerte von useQuery
useQuery(GET_USERS) liefert { loading, error, data, refetch, fetchMore, networkStatus }. loading ist während des ersten Abrufs true. error enthält alle GraphQL- oder Netzwerkfehler. data enthält das Abfrageergebnis entsprechend der Abfragestruktur.
Prüfen Sie loading und error zuerst, bevor Sie auf data zugreifen, um das Rendern von null-Werten zu vermeiden.
Muster für Lade- und Fehleranzeigen
Rendern Sie eine Skeleton-Komponente, solange loading true ist. Rendern Sie eine Fehlermeldung, wenn error definiert ist (greifen Sie für den Fehlertext auf error.message zu). Rendern Sie den eigentlichen Inhalt nur, wenn data definiert und loading false ist.
Dieses Drei-Zustände-Muster (loading / error / data) ist die standardmäßige Struktur für Apollo-Client-Komponenten.
Auf Query-Daten zugreifen
Das data-Objekt bildet die Struktur der GraphQL-Query ab. Bei query { users { id name } } greifen Sie über data.users auf ein Array von Objekten mit {id, name} zu. Die TypeScript-Typen stimmen überein, wenn Sie graphql-codegen zum Generieren typisierter Hooks verwenden.
Ohne Codegen wird data als any typisiert. Mit Codegen liefert useQuery automatisch vollständig typisierte Daten.
Variablen in useQuery
Übergeben Sie Variablen als zweites Argument: useQuery(GET_USER, { variables: { id: userId } }). Die Query wird automatisch erneut ausgeführt, wenn sich userId ändert, genau wie bei einem useEffect-Abhängigkeitsarray.
Apollo Client cached jede eindeutige Kombination aus Query und Variablen separat. Daher haben GET_USER mit id: "1" und GET_USER mit id: "2" unabhängige Cache-Einträge.
Eine Query überspringen
Übergeben Sie skip: true in den Optionen, um die Ausführung der Query zu verhindern: useQuery(GET_USER, { skip: !userId }). Apollo sendet keine Anfrage, wenn skip true ist; loading ist false und data ist undefined.
Dies entspricht bei Apollo dem null key von SWR und der Option enabled: false von React Query.
Manuell erneut abrufen
Die von useQuery zurückgegebene refetch-Funktion löst unabhängig von der Fetch-Policy eine Netzwerkanfrage aus. Rufen Sie refetch() nach einer Benutzeraktion auf, die die Serverdaten geändert haben könnte, beispielsweise nach dem Absenden eines Formulars.
Übergeben Sie refetch neue Variablen: refetch({ id: newId }), um den erneuten Abruf mit anderen Parametern durchzuführen.
Netzwerkstatus verfolgen
Übergeben Sie notifyOnNetworkStatusChange: true in den Optionen, um Aktualisierungen zu erhalten, wenn sich der Netzwerkstatus ändert (fetching, refetching, polling usw.). Das Feld networkStatus enthält einen numerischen Code aus dem NetworkStatus-Enum.
Damit können Sie eine dezente Anzeige wie „Wird aktualisiert“ einblenden, während ein erneuter Abruf im Hintergrund läuft, ohne die aktuellen Daten auszublenden.
Signatur von useMutation
useMutation(CREATE_USER) liefert [mutateFunction, { loading, error, data, reset }]. Die mutate-Funktion wird aufgerufen, wenn der Benutzer ein Formular absendet. Sie gibt ein Promise mit { data, errors } zurück.
Rufen Sie mutate({ variables: { name: 'Alice', email: 'alice@example.com' } }) auf, um Eingaben an die Mutation zu übergeben.
onCompleted- und onError-Callbacks
Übergeben Sie onCompleted: (data) => navigate('/dashboard') und onError: (error) => showToast(error.message) an die Optionen von useMutation. Diese Callbacks werden ausgelöst, nachdem die Mutation erfolgreich abgeschlossen oder abgelehnt wurde.
onCompleted erhält die Ergebnisdaten der Mutation und eignet sich zum Auslösen einer Navigation, zum Anzeigen von Erfolgsmeldungen oder zum Zurücksetzen von Formularen.
Optimistische Antwort in useMutation
Die Option optimisticResponse im mutate-Aufruf schreibt sofort ein synthetisches Ergebnis in den Cache, bevor der Server antwortet. Apollo rendert die optimistischen Daten sofort und ersetzt sie durch die echte Serverantwort, sobald diese eintrifft.
Wenn die Mutation fehlschlägt, setzt Apollo den Cache automatisch auf den Zustand vor der optimistischen Aktualisierung zurück, sodass die Benutzeroberfläche konsistent bleibt.
useQuery-Option skip
Was geschieht bei useQuery, wenn skip: true übergeben wird?
Zusammenfassung der Lektion
Definieren Sie Queries mit dem gql-Tag, rufen Sie useQuery(QUERY, { variables, skip }) auf und behandeln Sie die Zustände loading, error und data. useMutation liefert eine Trigger-Funktion und ein Statusobjekt; rufen Sie die Funktion mit Variablen auf und verarbeiten Sie die Ergebnisse über onCompleted und onError. Optimistische Antworten aktualisieren den Cache sofort und werden bei einem Fehler automatisch zurückgerollt.
Die Option skip und das durch Variablen gesteuerte erneute Abrufen ermöglichen das bedingte und parametrisierte Laden von Daten.
Häufig gestellte Fragen
Ist die Lektion „useQuery- und useMutation-Hooks“ kostenlos?
Ja — der vollständige Text von „useQuery- und useMutation-Hooks“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des React Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „useQuery- und useMutation-Hooks“?
Daten mit useQuery abrufen, Mutationen mit useMutation ausführen und Lade-, Fehler- und Datenzustände behandeln Du übst React Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um React Academy zu starten?
Keine Vorkenntnisse erforderlich. React Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „useQuery- und useMutation-Hooks“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser React Academy-Lektion Code schreiben und ausführen?
Ja. Jede React Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- GraphQL-Grundlagen für React-Entwickler
- Apollo Client in React einrichten
- useQuery- und useMutation-Hooks
- Apollo-Cache: Normalisierung und Aktualisierungen