React Academy · Ders

useInfiniteQuery ile Sonsuz Kaydırma ve Sayfalama

Sayfalara bölünmüş verileri getirin ve useInfiniteQuery ile yeni sayfaları kesintisiz yükleyin.

4. ders / 413 adım

useInfiniteQuery ile Sonsuz Kaydırma ve Sayfalama, CoddyKit'te ücretsiz bir React Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, React Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. React Academy kursu toplamda 4 dersten oluşur.

Hoş Geldiniz

Bu derste sayfalandırılmış verileri almak için useInfiniteQuery kullanacak ve kullanıcı kaydırdıkça daha fazla sayfa yükleyen bir sonsuz kaydırma düzeni uygulayacaksınız.

useInfiniteQuery Nedir?

useInfiniteQuery verileri 'sayfalar' hâlinde alır. Her sayfa ayrı ayrı alınır ve önbelleğe alınan listeye eklenir. Bu işlev fetchNextPage, hasNextPage ve isFetchingNextPage yardımcılarını sunar.

Temel Kurulum

initialPageParam ve getNextPageParam değerlerini tanımlayınız. queryFn geçerli pageParam değerini alır ve bir sonuç page'i döndürmelidir.
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 son alınan page'i ve tüm page'leri alır. Daha sonraki page imlecini veya numarasını döndürünüz; daha fazla page olmadığını belirtmek için undefined/null döndürünüz (hasNextPage değerini false yapar).
getNextPageParam: (lastPage, allPages) => {
  return lastPage.hasMore ? lastPage.nextCursor : undefined;
}

Tüm Page'leri Görüntüleme

data.pages, page sonuçlarından oluşan bir dizidir. Tüm öğeleri kesintisiz bir liste olarak görüntülemek için bu diziyi düzleştiriniz.
const allPosts = data.pages.flatMap(page => page.items);

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

Daha Fazla Yükle Düğmesi

fetchNextPage çağrısı yapan bir “Daha Fazla Yükle” düğmesi ekleyiniz. Daha fazla page olmadığında veya bir getirme işlemi devam ederken düğmeyi devre dışı bırakınız.
<button
  onClick={() => fetchNextPage()}
  disabled={!hasNextPage || isFetchingNextPage}
>
  {isFetchingNextPage ? 'Loading...' : hasNextPage ? 'Load More' : 'No more posts'}
</button>

IntersectionObserver ile Sonsuz Kaydırma

Listenin altındaki işaretçi div öğesine bir IntersectionObserver bağlayınız. Bu öğe görüntü alanına girdiğinde fetchNextPage çağrısını otomatik olarak yapınız.
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 */}

Çift Yönlü Sonsuz Kaydırma

Sohbet uygulamalarında her iki yönde de kaydırmayı destekleyiniz: Eski iletiler için fetchNextPage, yeni iletiler için getPreviousPageParam/fetchPreviousPage kullanınız.

Page ve İmleç Tabanlı Sayfalama

Ofset/page tabanlı yaklaşımda: initialPageParam=1 olur ve getNextPageParam, lastPage.page + 1 döndürür. İmleç tabanlı yaklaşımda son öğenin ID değerini imleç olarak kullanınız. İmleç tabanlı yaklaşım canlı veriler için daha kararlıdır.
// Offset-based
getNextPageParam: (lastPage) => lastPage.page + 1

Sonsuz Sorguları Yeniden Getirme

Bir sonsuz query üzerinde invalidateQueries çağrısı yalnızca ilk page'i yeniden getirir. Tüm page'leri yeniden getirmek için (örneğin yeni bir gönderi eklendikten sonra) queryClient.resetQueries veya refetchType: 'all' kullanınız.

Kısa Kontrol

Yüklenecek başka page olmadığını belirtmek için getNextPageParam ne döndürmelidir?

Özet

useInfiniteQuery, page'leri data.pages içinde biriktirir. Görüntülemek için flatMap ile düzleştiriniz. Durdurmak için getNextPageParam değerinin undefined döndürmesini sağlayınız. Sonsuz kaydırma için düğme tıklamasında veya IntersectionObserver ile fetchNextPage çağrısını tetikleyiniz.

Kurs Tamamlandı

Tebrikler! **React Query: Sunucu Durumu Yönetimi** kursunu tamamladınız. Artık TanStack Query ile veri getirebilir, önbelleğe alabilir, değiştirebilir, sayfalayabilir ve sonsuz kaydırma uygulayabilirsiniz.
Başlamak ücretsiz

Yapay zeka eğitmeniyle React öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
88
Dersler
324

Sıkça Sorulan Sorular

“useInfiniteQuery ile Sonsuz Kaydırma ve Sayfalama” dersi ücretsiz mi?

Evet — “useInfiniteQuery ile Sonsuz Kaydırma ve Sayfalama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve React Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. React Academy kursu toplamda 4 dersten oluşur.

“useInfiniteQuery ile Sonsuz Kaydırma ve Sayfalama” dersinde ne öğreneceğim?

Sayfalara bölünmüş verileri getirin ve useInfiniteQuery ile yeni sayfaları kesintisiz yükleyin. React Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

React Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te React Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“useInfiniteQuery ile Sonsuz Kaydırma ve Sayfalama” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu React Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her React Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. React Query ve QueryClient Kurulumu
  2. Önbelleğe Alma, Eski Veri Süresi ve Arka Planda Yeniden Getirme
  3. useMutation ile Değişiklikler
  4. useInfiniteQuery ile Sonsuz Kaydırma ve Sayfalama
← React Academy Sayfasına Dön