Data Fetching in React und Next.js, verglichen an einer App

Data Fetching in React: Server, TanStack Query, SWR | We.Inc

Wähle mit einem kurzen Quiz einen Ansatz für Data Fetching in React und vergleiche dann Server Components, TanStack Query und SWR bei Caching, Mutationen und Standardwerten, an einer einzigen Beispiel-App.

Lade Daten auf dem Server, wann immer es geht: Im Next.js App Router wartet eine asynchrone Server Component auf die Daten, bevor überhaupt HTML gesendet wird, ganz ohne Code für Lade-Spinner. Für Daten, die sich ändern, während die Seite offen ist, nutze einen Client-Cache wie TanStack Query oder SWR, der Caching, Wiederholungen und Mutationen übernimmt. Ein einfaches fetch in useEffect passt für einmalige Anfragen.

Welcher Ansatz passt

Jedes Beispiel auf dieser Seite lädt und bearbeitet dieselbe kleine Notizliste, damit die Unterschiede vom Ansatz kommen und nicht von der Demo. Beantworte die drei Fragen unten, um eine erste Empfehlung und das passende Snippet zu bekommen.

Häufige Fragen

Werden fetch-Anfragen im Next.js App Router gecacht?

Laut aktueller Next.js-Dokumentation werden fetch-Anfragen standardmäßig nicht gecacht und blockieren das Rendern, bis sie fertig sind. Identische Anfragen innerhalb eines Renders werden memoisiert, und Caching aktivierst du mit der Direktive use cache, oder du streamst frische Daten innerhalb von Suspense.

Was sind die wichtigen Standardwerte von TanStack Query?

Daten sind sofort veraltet (staleTime 0), daher wird beim Mounten, beim Fokussieren des Fensters und bei erneuter Verbindung neu geladen. Ungenutzte Queries bleiben 5 Minuten im Speicher (gcTime), und fehlgeschlagene Queries werden 3 Mal mit exponentiellem Backoff wiederholt. Erhöhe staleTime, wenn dir dieses Nachladen zu viel ist.

TanStack Query oder SWR?

Beide cachen nach Schlüssel und validieren bei Fokus und erneuter Verbindung neu. TanStack Query bringt mehr Eingebautes für Mutationen, Invalidierung und Devtools mit, SWR hat eine kleinere API rund um useSWR(key, fetcher). Wähle eine Bibliothek pro App, beide zusammen verdoppeln den Cache.

Brauche ich mit Server Components noch eine Client-Bibliothek?

Für das Laden von Seiten oft nicht. Du brauchst eine, wenn Daten sich ohne Navigation aktualisieren müssen, wenn Nutzer bearbeiten und sofortiges Feedback erwarten, oder für unendliche Listen. Viele Apps laden auf dem Server und nutzen einen Client-Cache nur auf interaktiven Screens.

Wie prüfe ich mit Supabase auf dem Server, wer angemeldet ist?

Der serverseitige Leitfaden von Supabase sagt, dass man getSession() in Servercode nie vertrauen soll. Rufe supabase.auth.getClaims() auf, das die Signatur des Tokens prüft, und frage dann deine Tabellen ab. Row Level Security gilt weiterhin für jede Abfrage.

Zuerst der Server, dann bei Bedarf ein Client-Cache

Streamen statt warten

Warum das einfache useEffect-Muster nicht reicht

Standardwerte, die Leute überraschen

Verhalten ohne Konfiguration

Wasserfälle auf dem Server vermeiden

Beide Anfragen starten, dann gemeinsam abwarten

Wenn du beide Funktionen aufrufst, bevor du wartest, wartet keine auf die andere.

Einen langsamen Teil mit Suspense streamen

Die Überschrift wird sofort gesendet, die Notizliste wird nachgestreamt, sobald ihre Daten ankommen.

Supabase in einer Server Component

Hier wird der createClient-Helper aus dem serverseitigen Next.js-Leitfaden von Supabase verwendet (lib/supabase/server.ts, basierend auf @supabase/ssr). getClaims() prüft das Token des angemeldeten Nutzers, bevor die Abfrage läuft.

Notizen des angemeldeten Nutzers, auf dem Server geladen

Row Level Security auf der Tabelle notes entscheidet, welche Zeilen zurückkommen.

Wähle einen Ansatz

Nutzt du Server Components (zum Beispiel den Next.js App Router)?

Müssen sich die Daten aktualisieren, während die Seite offen bleibt?

Bearbeiten Nutzer diese Daten auf dem Screen?

Ja

Nein

Start-Snippet

Snippet kopieren

Lade die Daten in einer asynchronen Server Component. Ergänze später nur für die Teile, die interaktiv werden, einen Client-Cache.

Nutze TanStack Query: useQuery zum Lesen, useMutation zum Schreiben und invalidateQueries zum Aktualisieren nach einer Änderung.

Nutze SWR: useSWR hält die Ansicht bei Fokus und erneuter Verbindung mit sehr wenig Code aktuell.

Ein einzelnes fetch in useEffect reicht hier. Räume mit einem ignore-Flag auf, damit eine verspätete Antwort keinen neueren State überschreibt.

Empfehlung: {v}

Server Component

TanStack Query

SWR

useEffect und fetch

Kostenlos starten · Keine Kreditkarte nötig

Verwandt: Ratgeber

Produkt

Für wen

Funktionen

Ressourcen

Unternehmen

Sitemap