React Academy · Lektion

Infinite Scroll und Pagination mit useInfiniteQuery

Rufen Sie paginierte Daten ab und laden Sie mit useInfiniteQuery nahtlos weitere Seiten.

Lektion 4 von 413 Schritte

Infinite Scroll und Pagination mit useInfiniteQuery ist eine kostenlose React Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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 useInfiniteQuery, um paginierte Daten abzurufen und ein Infinite-Scroll-Muster zu implementieren, das beim Scrollen des Benutzers weitere Seiten lädt.

Was ist useInfiniteQuery?

useInfiniteQuery ruft Daten in „Seiten“ ab. Jede Seite wird separat abgerufen und an die Liste im Cache angehängt. Es stellt die Hilfsfunktionen fetchNextPage, hasNextPage und isFetchingNextPage bereit.

Grundlegende Einrichtung

Definieren Sie initialPageParam und getNextPageParam. Die queryFn erhält den aktuellen pageParam und muss eine Ergebnisseite zurückgeben.
const { data, fetchNextPage, hasNextPage } = useInfiniteQuery({
  queryKey: ['posts'],
  queryFn: ({ pageParam }) =>
    fetch('/api/posts?cursor=' + pageParam).then(r => r.json()),
  initialPageParam: 0,
  getNextPageParam: (lastPage) => lastPage.nextCursor ?? undefined,
});

getNextPageParam

getNextPageParam erhält die zuletzt abgerufene Seite und alle Seiten. Geben Sie den Cursor oder die Nummer der nächsten Seite zurück oder undefined/null, um zu signalisieren, dass keine weiteren Seiten vorhanden sind (dadurch wird hasNextPage auf false gesetzt).
getNextPageParam: (lastPage, allPages) => {
  return lastPage.hasMore ? lastPage.nextCursor : undefined;
}

Alle Seiten rendern

data.pages ist ein Array mit Seitenergebnissen. Führen Sie die Seiten zusammen, um alle Elemente als fortlaufende Liste zu rendern.
const allPosts = data.pages.flatMap(page => page.items);

return (
  <ul>
    {allPosts.map(post => <li key={post.id}>{post.title}</li>)}
  </ul>
);

Schaltfläche zum Nachladen

Fügen Sie eine „Mehr laden“-Schaltfläche hinzu, die fetchNextPage aufruft. Deaktivieren Sie sie, wenn keine weiteren Seiten vorhanden sind oder gerade ein Abruf läuft.
<button
  onClick={() => fetchNextPage()}
  disabled={!hasNextPage || isFetchingNextPage}
>
  {isFetchingNextPage ? 'Loading...' : hasNextPage ? 'Load More' : 'No more posts'}
</button>

Endloses Scrollen mit IntersectionObserver

Verknüpfen Sie einen IntersectionObserver mit einem Sentinel-div am Ende der Liste. Sobald es im Viewport erscheint, rufen Sie automatisch fetchNextPage auf.
const observerRef = useRef();
useEffect(() => {
  const observer = new IntersectionObserver(entries => {
    if (entries[0].isIntersecting && hasNextPage) fetchNextPage();
  });
  if (observerRef.current) observer.observe(observerRef.current);
  return () => observer.disconnect();
}, [hasNextPage, fetchNextPage]);

<div ref={observerRef} />  {/* sentinel at bottom */}

Bidirektionales endloses Scrollen

Unterstützen Sie bei Chat-Apps das Scrollen in beide Richtungen: Verwenden Sie fetchNextPage für ältere Nachrichten und getPreviousPageParam/fetchPreviousPage für neuere Nachrichten.

Seitennummern- vs. cursorbasierte Paginierung

Offset-/seitenbasierte Paginierung: initialPageParam=1, getNextPageParam gibt lastPage.page + 1 zurück. Cursorbasierte Paginierung: Verwenden Sie die ID des letzten Elements als Cursor. Die cursorbasierte Variante ist bei Live-Daten stabiler.
// Offset-based
getNextPageParam: (lastPage) => lastPage.page + 1

Infinite Queries erneut abrufen

Der Aufruf von invalidateQueries für eine Infinite Query ruft nur die erste Seite erneut ab. Um alle Seiten erneut abzurufen (z. B. nachdem ein neuer Beitrag hinzugefügt wurde), verwenden Sie queryClient.resetQueries oder refetchType: 'all'.

Schnelltest

Was muss getNextPageParam zurückgeben, um zu signalisieren, dass keine weiteren Seiten geladen werden können?

Zusammenfassung

useInfiniteQuery sammelt Seiten in data.pages. Führen Sie sie mit flatMap zusammen, um sie zu rendern. Geben Sie mit getNextPageParam undefined zurück, um das Laden zu beenden. Lösen Sie fetchNextPage durch einen Klick auf eine Schaltfläche oder über einen IntersectionObserver für endloses Scrollen aus.

Kurs abgeschlossen

Herzlichen Glückwunsch! Sie haben **React Query: Server State Management** abgeschlossen. Sie können jetzt mit TanStack Query Daten abrufen, cachen, mutieren, paginieren und endlos scrollen.
Kostenlos starten

Lerne React mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
88
Lektionen
324

Häufig gestellte Fragen

Ist die Lektion „Infinite Scroll und Pagination mit useInfiniteQuery“ kostenlos?

Ja — der vollständige Text von „Infinite Scroll und Pagination mit useInfiniteQuery“ 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 „Infinite Scroll und Pagination mit useInfiniteQuery“?

Rufen Sie paginierte Daten ab und laden Sie mit useInfiniteQuery nahtlos weitere Seiten. 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 4 von 4.

Wie lange dauert die Lektion „Infinite Scroll und Pagination mit useInfiniteQuery“?

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