0Pricing
React Academy · Lektion

Loader und Actions (Data Router API)

Rufen Sie Routendaten mit Loadern vor dem Rendering ab und verarbeiten Sie Formularübermittlungen mit Actions.

Loader und Actions (Data Router API) 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.

Was sind Loader?

Im Data Router von React Router v6.4+ ist ein loader eine asynchrone Funktion einer Route, die Daten vor dem Rendern der Route abruft und damit das Abrufmuster mit useEffect ersetzt.

Einen Loader definieren

Fügen Sie einem Routenobjekt eine loader-Eigenschaft hinzu. Sie erhält { params, request } und gibt Daten (oder eine Response) zurück.

import { createBrowserRouter } from 'react-router-dom';

async function userLoader({ params }) {
  const res = await fetch(`/api/users/${params.id}`);
  if (!res.ok) throw new Response('Not Found', { status: 404 });
  return res.json();
}

const router = createBrowserRouter([
  { path: '/users/:id', element: <UserDetail />, loader: userLoader },
]);

Loader-Daten mit useLoaderData auslesen

useLoaderData() gibt alles zurück, was der Loader zurückgegeben hat. Die Komponente wird erst gerendert, nachdem der Loader abgeschlossen ist.

import { useLoaderData } from 'react-router-dom';

function UserDetail() {
  const user = useLoaderData();
  return <h1>{user.name}</h1>;
}

Was sind Actions?

Eine action ist eine asynchrone Funktion, die Datenmutationen verarbeitet (Formularübermittlungen, Löschvorgänge). Sie wird ausgeführt, bevor die Route nach einem Formular-POST erneut gerendert wird.

async function createUserAction({ request }) {
  const formData = await request.formData();
  const name = formData.get('name');
  await fetch('/api/users', {
    method: 'POST',
    body: JSON.stringify({ name }),
    headers: { 'Content-Type': 'application/json' },
  });
  return redirect('/users');
}

Actions mit Form auslösen

Ersetzen Sie <form> durch React Routers <Form>. Beim Absenden werden die Felder als FormData serialisiert und die Action der Route aufgerufen.

import { Form } from 'react-router-dom';

function NewUser() {
  return (
    <Form method="post">
      <input name="name" />
      <button type="submit">Create</button>
    </Form>
  );
}

Daten aus Actions zurückgeben

Actions können Daten zurückgeben, nicht nur eine Weiterleitung. Lesen Sie diese in der Komponente mit useActionData() aus – das ist beispielsweise nützlich, um Validierungsfehler zurückzugeben.

async function loginAction({ request }) {
  const data = await request.formData();
  const errors = validate(data);
  if (errors) return errors; // returned to useActionData
  await login(data);
  return redirect('/dashboard');
}

function Login() {
  const errors = useActionData();
  return (
    <Form method="post">
      {errors?.email && <p>{errors.email}</p>}
      <input name="email" />
    </Form>
  );
}

Ladezustände mit useNavigation

useNavigation() zeigt an, wann ein Loader oder eine Action ausgeführt wird, sodass Sie Ladeindikatoren anzeigen oder Senden-Schaltflächen deaktivieren können.

function SubmitButton() {
  const navigation = useNavigation();
  const isSubmitting = navigation.state === 'submitting';
  return (
    <button type="submit" disabled={isSubmitting}>
      {isSubmitting ? 'Saving...' : 'Save'}
    </button>
  );
}

Verzögerte Daten mit defer()

Verwenden Sie defer(), um langsame Daten-Promises aus einem Loader zurückzugeben, ohne das Rendern zu blockieren. Lösen Sie sie anschließend mit <Await> und Suspense auf.

import { defer, Await } from 'react-router-dom';

async function slowLoader() {
  return defer({ fast: await getFast(), slow: getSlow() });
}

function Page() {
  const { fast, slow } = useLoaderData();
  return (
    <>
      <h1>{fast.title}</h1>
      <Suspense fallback={<p>Loading...</p>}>
        <Await resolve={slow}>{data => <Chart data={data} />}</Await>
      </Suspense>
    </>
  );
}

Revalidierung nach Actions

Nachdem eine Action abgeschlossen ist, führt React Router automatisch alle aktiven Loader erneut aus, um die Daten zu aktualisieren – ein manueller erneuter Abruf ist nicht erforderlich.

Fehlerbehandlung in Loadern

Werfen Sie aus einem Loader eine Response oder einen beliebigen Fehler. React Router fängt ihn ab und rendert das errorElement der Route, auf das Sie über useRouteError() zugreifen können.

function ErrorPage() {
  const error = useRouteError();
  return (
    <div>
      <h1>{error.status} {error.statusText}</h1>
    </div>
  );
}

Fetchers für Mutationen ohne Navigation

Mit useFetcher() können Sie Loader oder Actions aufrufen, ohne zu navigieren. Das ist beispielsweise für Inline-Formulare nützlich, etwa um einen Beitrag zu liken, ohne die Seite zu verlassen.

function LikeButton({ postId }) {
  const fetcher = useFetcher();
  return (
    <fetcher.Form method="post" action={`/posts/${postId}/like`}>
      <button type="submit">Like</button>
    </fetcher.Form>
  );
}

Schnelltest

Welcher Hook liest die von der Loader-Funktion einer Route zurückgegebenen Daten aus?

Zusammenfassung

Die Data API von React Router verwendet loader, um Daten vor dem Rendern abzurufen, und action, um Mutationen zu verarbeiten. Komponenten lesen Loader-Daten mit useLoaderData(), Action-Ergebnisse mit useActionData() und den Navigationsstatus mit useNavigation() aus.

Häufig gestellte Fragen

Ist die Lektion „Loader und Actions (Data Router API)“ kostenlos?

Ja — der vollständige Text von „Loader und Actions (Data Router API)“ 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 „Loader und Actions (Data Router API)“?

Rufen Sie Routendaten mit Loadern vor dem Rendering ab und verarbeiten Sie Formularübermittlungen mit Actions. 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 „Loader und Actions (Data Router API)“?

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. Verschachtelte Routes und Outlet-Layouts
  2. Loader und Actions (Data Router API)
  3. Geschützte Routes und Auth-Guards
  4. State in URL-Suchparametern verwalten
← Zurück zu React Academy