0Pricing
React Academy · Lektion

Asynchrone Logik mit createAsyncThunk

Verarbeiten Sie API-Aufrufe in Redux mit createAsyncThunk sowie den Lebenszyklusphasen pending, fulfilled und rejected.

Asynchrone Logik mit createAsyncThunk ist eine kostenlose React Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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 verarbeiten Sie API-Aufrufe in Redux mit createAsyncThunk und behandeln die Lifecycle-Actions pending, fulfilled und rejected in Ihrem Slice.

Was ist createAsyncThunk?

createAsyncThunk erzeugt einen Thunk-Action-Creator, der automatisch drei Lifecycle-Actions dispatcht: pending (gestartet), fulfilled (erfolgreich abgeschlossen) und rejected (fehlgeschlagen). Sie behandeln jede davon in extraReducers.

Einen Thunk definieren

Rufen Sie createAsyncThunk mit einem Type-String und einer asynchronen Payload-Creator-Funktion auf. Geben Sie die Daten zurück, die als fulfilled-Payload dienen sollen.
import { createAsyncThunk } from '@reduxjs/toolkit';

export const fetchUser = createAsyncThunk(
  'users/fetchById',
  async (userId) => {
    const response = await fetch('/api/users/' + userId);
    return response.json(); // becomes action.payload on fulfilled
  }
);

In extraReducers verarbeiten

Fügen Sie im extraReducers Ihres Slices Cases für alle drei Lifecycle-Zustände hinzu. Verwalten Sie loading-, data- und error-State entsprechend.
extraReducers: (builder) => {
  builder
    .addCase(fetchUser.pending, state => {
      state.loading = true;
      state.error = null;
    })
    .addCase(fetchUser.fulfilled, (state, action) => {
      state.loading = false;
      state.user = action.payload;
    })
    .addCase(fetchUser.rejected, (state, action) => {
      state.loading = false;
      state.error = action.error.message;
    });
}

Den Thunk dispatchen

Dispatchen Sie den Thunk in einer Komponente mit useDispatch. Übergeben Sie Argumente direkt an den Thunk-Action-Creator.
const dispatch = useDispatch();
useEffect(() => {
  dispatch(fetchUser(userId));
}, [userId]);

Auf den State im Thunk zugreifen

Der Payload-Creator erhält als zweites Argument ein thunkAPI-Objekt. Verwenden Sie thunkAPI.getState(), um den aktuellen Redux-State zu lesen, und thunkAPI.dispatch(), um weitere Actions zu dispatchen.
export const saveItem = createAsyncThunk(
  'items/save',
  async (item, { getState }) => {
    const { auth } = getState();
    return fetch('/api/items', {
      method: 'POST',
      headers: { Authorization: 'Bearer ' + auth.token },
      body: JSON.stringify(item),
    }).then(r => r.json());
  }
);

Fehler mit rejectWithValue verarbeiten

Um eine benutzerdefinierte Fehler-Payload an den rejected Case zu übergeben, verwenden Sie thunkAPI.rejectWithValue(). Die action.payload der rejected Action enthält dann Ihr benutzerdefiniertes Fehlerobjekt.
export const fetchData = createAsyncThunk(
  'data/fetch',
  async (id, { rejectWithValue }) => {
    const res = await fetch('/api/' + id);
    if (!res.ok) return rejectWithValue({ status: res.status });
    return res.json();
  }
);
// In rejected case: action.payload.status is available

Thunks abbrechen

Übergeben Sie ein AbortController-Signal an Ihren fetch-Aufruf im Thunk. createAsyncThunk stellt das Signal automatisch über thunkAPI.signal bereit, wenn der Thunk mit dispatch.abort() abgebrochen wird.
async (id, { signal }) => {
  const res = await fetch('/api/' + id, { signal });
  return res.json();
}

Auf einen dispatchten Thunk warten

Das dispatch() eines Thunks gibt ein Promise zurück. Sie können darauf warten, um zu erkennen, wann die asynchrone Verarbeitung abgeschlossen ist – das ist beispielsweise für Weiterleitungen nach dem Speichern nützlich.
const result = await dispatch(saveItem(data));
if (saveItem.fulfilled.match(result)) {
  navigate('/success');
}

Builder-Notation vs. Objekt-Notation

Verwenden Sie in extraReducers das Callback-Muster builder.addCase — es ist typsicher und wird unterstützt. Die ältere Objekt-Key-Notation ist in aktuellen RTK-Versionen veraltet.

Kurztest

Was passiert, wenn die asynchrone Funktion innerhalb von createAsyncThunk einen Fehler auslöst?

Zusammenfassung

createAsyncThunk erzeugt automatisch pending-, fulfilled- und rejected-Actions. Behandeln Sie alle drei in extraReducers. Verwenden Sie rejectWithValue für benutzerdefinierte Fehler-Payloads und thunkAPI.getState(), um innerhalb von Thunks auf den aktuellen State zuzugreifen.

Als Nächstes

Nächste Lektion: **RTK Query: Endpoints und automatisches Caching** — Sie definieren API-Endpoints mit createApi und lassen RTK Query das Caching automatisch verwalten.

Häufig gestellte Fragen

Ist die Lektion „Asynchrone Logik mit createAsyncThunk“ kostenlos?

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

Verarbeiten Sie API-Aufrufe in Redux mit createAsyncThunk sowie den Lebenszyklusphasen pending, fulfilled und rejected. 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 2 von 4.

Wie lange dauert die Lektion „Asynchrone Logik mit createAsyncThunk“?

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. Redux Toolkit Slices und createSlice
  2. Asynchrone Logik mit createAsyncThunk
  3. RTK Query: Endpoints und automatisches Caching
  4. Optimistische Updates und Cache-Invalidierung
← Zurück zu React Academy