0Pricing
React Academy · Lektion

Mutations mit useMutation

Senden Sie mit useMutation Daten an APIs, verarbeiten Sie Lade- und Fehlerzustände und invalidieren Sie Queries bei Erfolg.

Mutations mit useMutation 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.

Willkommen

In dieser Lektion verwenden Sie useMutation, um Daten an APIs zu senden, Lade- und Fehlerstatus zu behandeln und veraltete Queries nach erfolgreichen Mutations zu invalidieren.

Grundlagen von useMutation

Rufen Sie useMutation mit einer mutationFn auf. Es gibt eine mutate-Funktion und Statuswerte zurück. Rufen Sie mutate() auf, um den Vorgang auszulösen.
import { useMutation } from '@tanstack/react-query';

const { mutate, isLoading, isError } = useMutation({
  mutationFn: (newPost) => fetch('/api/posts', {
    method: 'POST',
    body: JSON.stringify(newPost),
  }).then(r => r.json()),
});

mutate aufrufen

Rufen Sie `mutate(variables)` in einem Event-Handler auf. Die Variablen werden als erstes Argument an mutationFn übergeben.
<button onClick={() => mutate({ title: 'New Post' })}>
  Create Post
</button>

Callbacks: onSuccess, onError, onSettled

Fügen Sie useMutation Callback-Optionen hinzu: onSuccess wird nach einer erfolgreichen Mutation ausgeführt, onError bei einem Fehler und onSettled in beiden Fällen (ähnlich wie finally).
useMutation({
  mutationFn: createPost,
  onSuccess: (data) => {
    console.log('Created:', data);
    navigate('/posts/' + data.id);
  },
  onError: (error) => {
    toast.error(error.message);
  },
})

Queries nach einer Mutation invalidieren

Invalidieren Sie nach einer erfolgreichen Mutation zugehörige Queries, damit React Query aktuelle Daten erneut abruft. Verwenden Sie onSuccess mit queryClient.invalidateQueries.
import { useQueryClient } from '@tanstack/react-query';

const queryClient = useQueryClient();

const { mutate } = useMutation({
  mutationFn: createPost,
  onSuccess: () => {
    queryClient.invalidateQueries({ queryKey: ['posts'] });
  },
});

mutateAsync für await-Syntax

Verwenden Sie `mutateAsync` anstelle von `mutate`, um auf die Mutation zu warten und sie mit try/catch zu behandeln.
const { mutateAsync } = useMutation({ mutationFn: createPost });

async function handleSubmit() {
  try {
    const post = await mutateAsync({ title: 'Draft' });
    navigate('/posts/' + post.id);
  } catch (err) {
    setError(err.message);
  }
}

Absenden während einer Mutation deaktivieren

Verwenden Sie `isPending` (oder `isLoading`), um den Absende-Button zu deaktivieren, während die Mutation ausgeführt wird.
const { mutate, isPending } = useMutation({ mutationFn: saveItem });

<button onClick={() => mutate(item)} disabled={isPending}>
  {isPending ? 'Saving...' : 'Save'}
</button>

Optimistische Aktualisierungen mit onMutate

Verwenden Sie onMutate, um den Cache zu aktualisieren, bevor der Server antwortet. Stellen Sie die Änderung in onError mithilfe des von onMutate zurückgegebenen Kontexts wieder her.
useMutation({
  mutationFn: likePost,
  onMutate: async (id) => {
    await queryClient.cancelQueries({ queryKey: ['posts'] });
    const prev = queryClient.getQueryData(['posts']);
    queryClient.setQueryData(['posts'], old => old.map(p =>
      p.id === id ? { ...p, likes: p.likes + 1 } : p));
    return { prev };
  },
  onError: (err, id, ctx) => queryClient.setQueryData(['posts'], ctx.prev),
  onSettled: () => queryClient.invalidateQueries({ queryKey: ['posts'] }),
})

Mutation-Status zurücksetzen

Rufen Sie `reset()` aus useMutation auf, um den Mutation-Status (Daten, Fehler und Status) zu löschen. Das ist nützlich, nachdem Sie zu einer anderen Seite navigiert oder ein Formular geleert haben.
const { mutate, isError, reset } = useMutation({ /* ... */ });

{isError && (
  <>
    <p>Error!</p>
    <button onClick={reset}>Try Again</button>
  </>
)}

Mehrere Mutations parallel ausführen

Rufen Sie mutate mehrmals parallel auf — jeder Aufruf wird unabhängig verfolgt. Verwenden Sie mutateAsync mit Promise.all für parallele Mutations.
await Promise.all([
  mutateAsync({ id: 1, title: 'First' }),
  mutateAsync({ id: 2, title: 'Second' }),
]);

Schnelltest

Wie stellen Sie nach einer erfolgreichen Mutation am besten sicher, dass die UI aktuelle Daten anzeigt?

Zusammenfassung

useMutation stellt mutate, isPending und Lifecycle-Callbacks bereit. Verwenden Sie onSuccess, um zugehörige Queries zu invalidieren. Verwenden Sie mutateAsync für Abläufe mit await. Verwenden Sie onMutate/onError für optimistische Aktualisierungen mit Rollback.

Als Nächstes

Nächste Lektion: **Infinite Scroll & Pagination mit useInfiniteQuery** — Sie rufen paginierte Daten ab und laden weitere Seiten nahtlos nach.

Häufig gestellte Fragen

Ist die Lektion „Mutations mit useMutation“ kostenlos?

Ja — der vollständige Text von „Mutations mit useMutation“ 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 „Mutations mit useMutation“?

Senden Sie mit useMutation Daten an APIs, verarbeiten Sie Lade- und Fehlerzustände und invalidieren Sie Queries bei Erfolg. 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 „Mutations mit useMutation“?

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

  1. React Query und QueryClient einrichten
  2. Caching, Stale Time und Refetching im Hintergrund
  3. Mutations mit useMutation
  4. Infinite Scroll und Pagination mit useInfiniteQuery
← Zurück zu React Academy