0Pricing
React Academy · Pelajaran

Gulir Tak Terbatas & Penomoran Halaman dengan useInfiniteQuery

Ambil data berhalaman dan muat halaman tambahan dengan lancar menggunakan useInfiniteQuery.

Gulir Tak Terbatas & Penomoran Halaman dengan useInfiniteQuery adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar React Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus React Academy mencakup 4 pelajaran total.

Selamat Datang

Dalam pelajaran ini, Anda akan menggunakan useInfiniteQuery untuk mengambil data berpaginasi dan menerapkan pola gulir tanpa batas yang memuat halaman tambahan saat pengguna menggulir.

Apa Itu useInfiniteQuery?

useInfiniteQuery mengambil data dalam beberapa 'halaman'. Setiap halaman diambil secara terpisah lalu ditambahkan ke daftar dalam cache. Hook ini menyediakan utilitas fetchNextPage, hasNextPage, dan isFetchingNextPage.

Penyiapan Dasar

Tentukan initialPageParam dan getNextPageParam. queryFn menerima pageParam saat ini dan harus mengembalikan satu halaman hasil.
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 menerima halaman terakhir yang diambil dan semua halaman. Kembalikan kursor atau nomor halaman berikutnya, atau undefined/null untuk menandakan bahwa tidak ada halaman lagi (menetapkan hasNextPage ke false).
getNextPageParam: (lastPage, allPages) => {
  return lastPage.hasMore ? lastPage.nextCursor : undefined;
}

Merender Semua Halaman

data.pages adalah array yang berisi hasil setiap halaman. Ratakan semuanya untuk merender semua item sebagai satu daftar berkelanjutan.
const allPosts = data.pages.flatMap(page => page.items);

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

Tombol Muat Lebih Banyak

Tambahkan tombol 'Muat Lebih Banyak' yang memanggil fetchNextPage. Nonaktifkan tombol tersebut saat tidak ada halaman lagi atau pengambilan data sedang berlangsung.
<button
  onClick={() => fetchNextPage()}
  disabled={!hasNextPage || isFetchingNextPage}
>
  {isFetchingNextPage ? 'Loading...' : hasNextPage ? 'Load More' : 'No more posts'}
</button>

Gulir Tanpa Batas dengan IntersectionObserver

Pasang IntersectionObserver pada div penanda di bagian bawah daftar. Saat penanda tersebut memasuki area pandang, panggil fetchNextPage secara otomatis.
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 */}

Gulir Tanpa Batas Dua Arah

Untuk aplikasi obrolan, dukung pengguliran ke dua arah: gunakan fetchNextPage untuk pesan yang lebih lama dan getPreviousPageParam/fetchPreviousPage untuk pesan yang lebih baru.

Paginasi Berbasis Halaman vs Kursor

Berbasis offset/halaman: initialPageParam=1, dan getNextPageParam mengembalikan lastPage.page + 1. Berbasis kursor: gunakan ID item terakhir sebagai kursor. Pendekatan berbasis kursor lebih stabil untuk data langsung.
// Offset-based
getNextPageParam: (lastPage) => lastPage.page + 1

Mengambil Ulang Kueri Tanpa Batas

Memanggil invalidateQueries pada kueri tanpa batas hanya mengambil ulang halaman pertama. Untuk mengambil ulang semua halaman (misalnya setelah postingan baru ditambahkan), gunakan queryClient.resetQueries atau refetchType: 'all'.

Pemeriksaan Cepat

Apa yang harus dikembalikan getNextPageParam untuk menandakan bahwa tidak ada halaman lagi yang perlu dimuat?

Ringkasan

useInfiniteQuery mengakumulasikan halaman di data.pages. Ratakan dengan flatMap untuk merendernya. Gunakan getNextPageParam yang mengembalikan undefined untuk berhenti. Picu fetchNextPage melalui klik tombol atau IntersectionObserver untuk pengguliran tanpa batas.

Kursus Selesai

Selamat! Anda telah menyelesaikan **React Query: Pengelolaan Status Server**. Kini Anda dapat mengambil, menyimpan dalam cache, memutasi, melakukan paginasi, dan menggulir tanpa batas dengan TanStack Query.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Gulir Tak Terbatas & Penomoran Halaman dengan useInfiniteQuery” gratis?

Ya — teks lengkap “Gulir Tak Terbatas & Penomoran Halaman dengan useInfiniteQuery” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus React Academy, upgrade ke CoddyKit PRO. Kursus React Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Gulir Tak Terbatas & Penomoran Halaman dengan useInfiniteQuery”?

Ambil data berhalaman dan muat halaman tambahan dengan lancar menggunakan useInfiniteQuery. Kamu berlatih React Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai React Academy?

Tidak diperlukan pengalaman sebelumnya. React Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Gulir Tak Terbatas & Penomoran Halaman dengan useInfiniteQuery” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran React Academy ini?

Ya. Setiap pelajaran React Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Menyiapkan React Query & QueryClient
  2. Penyimpanan Tembolok, Waktu Kedaluwarsa & Pengambilan Ulang di Latar Belakang
  3. Mutasi dengan useMutation
  4. Gulir Tak Terbatas & Penomoran Halaman dengan useInfiniteQuery
← Kembali ke React Academy