Takip et

React ile Özel Sayfalandırma (Pagination) Nasıl Oluşturulur?

React ile Özel Sayfalandırma (Pagination) Nasıl Oluşturulur? Giriş: Sayfalandırma Neden Önemli? Web uygulamalarında büyük veri kümelerini

React ile Özel Sayfalandırma (Pagination) Nasıl Oluşturulur?

Giriş: Sayfalandırma Neden Önemli?

Web uygulamalarında büyük veri kümelerini kullanıcıya sunarken, tüm veriyi tek seferde yüklemek ve göstermek hem performans hem de kullanıcı deneyimi açısından ciddi sorunlara yol açabilir. İşte bu noktada sayfalandırma (pagination) devreye girer. Sayfalandırma, büyük bir veri setini daha küçük, yönetilebilir parçalara bölerek kullanıcıların bu veriler arasında kolayca gezinmesini sağlayan temel bir UI/UX çözümüdür. React gibi modern bir JavaScript kütüphanesi ile özel sayfalandırma bileşenleri oluşturmak, uygulamanızın ihtiyaçlarına tam olarak uyum sağlayan esnek ve güçlü çözümler sunar.

Kullanıcı Deneyimi

Bir web sayfasında binlerce öğenin aynı anda listelendiğini hayal edin. Bu durum, kullanıcının aradığı bilgiyi bulmasını zorlaştırır, sayfayı kaydırma (scrolling) işlemini yorucu hale getirir ve genel kullanıcı deneyimini olumsuz etkiler. Sayfalandırma, içeriği mantıksal sayfalara bölerek kullanıcıların daha odaklı bir şekilde gezinmesine olanak tanır. Kullanıcılar hangi sayfada olduklarını bilir, toplam kaç sayfa olduğunu görür ve belirli bir sayfaya doğrudan atlayabilirler. Bu, özellikle e-ticaret siteleri, bloglar, forumlar ve veri tabloları gibi yoğun içerikli uygulamalar için kritik öneme sahiptir.

Performans Optimizasyonu

Sayfalandırmanın en büyük faydalarından biri performans optimizasyonudur. Tüm veriyi veritabanından çekip istemciye göndermek ve ardından tarayıcıda render etmek, özellikle yüksek boyutlu veri setleri için uzun yükleme sürelerine ve bellek sorunlarına neden olabilir. Sayfalandırma sayesinde, sunucudan yalnızca mevcut sayfa için gerekli olan veri parçası istenir ve render edilir. Bu, hem sunucu yükünü azaltır hem de istemci tarafındaki sayfa yükleme süresini ve tarayıcı performansını önemli ölçüde artırır. Uygulamanızın daha hızlı ve daha duyarlı çalışmasını sağlar.

Veri Yönetimi

Sayfalandırma, veri yönetimini daha düzenli hale getirir. Geliştiriciler, sunucu tarafında veri tabanından belirli bir aralıktaki veriyi (örneğin, LIMIT ve OFFSET kullanarak) çekerek istemciye gönderir. Bu, hem sunucu tarafında daha verimli sorgular yazılmasına olanak tanır hem de istemci tarafında gelen verinin boyutunu kontrol altında tutar. Ayrıca, sayfalandırma, kullanıcıların belirli filtreler veya sıralama seçenekleri uyguladığında da bu seçeneklerin yalnızca ilgili sayfa verilerine uygulanmasını sağlayarak veri manipülasyonunu kolaylaştırır.

Temel Kavramlar ve Sayfalandırma Mantığı

Özel bir sayfalandırma bileşeni oluşturmadan önce, temel kavramları ve arkasındaki mantığı anlamak önemlidir. Bu kavramlar, sayfalandırma işlemini doğru bir şekilde uygulamak için birer yapı taşı görevi görür.

currentPage (Mevcut Sayfa)

currentPage, kullanıcının o an görüntülediği sayfanın numarasıdır. Genellikle 1’den başlar. Bu değer, kullanıcının hangi veri bloğunu görmesi gerektiğini belirlemede merkezi bir rol oynar. Sayfalandırma bileşenindeki düğmelere tıklandığında bu değer güncellenir.

itemsPerPage (Sayfa Başına Öğe Sayısı)

itemsPerPage, her bir sayfada kaç adet öğe (veri kaydı) gösterileceğini belirleyen sabit bir değerdir. Bu değer, uygulamanın tasarımına ve kullanıcının tercihine göre ayarlanabilir. Örneğin, bir blog sayfasında 10 yazı, bir e-ticaret sitesinde 20 ürün gösterilebilir. Bu değer, toplam veri kümesinin kaç sayfaya bölüneceğini hesaplamak için kullanılır.

totalItems (Toplam Öğe Sayısı)

totalItems, veri kümesindeki toplam öğe sayısıdır. Bu bilgi genellikle sunucu tarafından sağlanır ve sayfalandırma bileşeninin kaç adet sayfa numarası göstermesi gerektiğini hesaplamak için kritik öneme sahiptir.

totalPages (Toplam Sayfa Sayısı)

totalPages, totalItems ve itemsPerPage kullanılarak hesaplanan toplam sayfa sayısıdır. Bu değer, sayfalandırma bileşeninin kaç adet sayfa numarası düğmesi oluşturacağını belirler. Genellikle Math.ceil(totalItems / itemsPerPage) formülü ile hesaplanır, çünkü kalan öğeler için de yeni bir sayfa açılması gerekir.

Veri Dilimleme Mantığı

Sayfalandırmanın temelinde, büyük veri kümesini mevcut sayfa numarasına ve sayfa başına öğe sayısına göre dilimleme (slicing) mantığı yatar. Bu, genellikle JavaScript’teki slice() dizin metodunu kullanarak yapılır.
indexOfLastItem: Mevcut sayfadaki son öğenin dizinini (index) belirler. Formülü: currentPage itemsPerPage.
* indexOfFirstItem: Mevcut sayfadaki ilk öğenin dizinini belirler. Formülü: indexOfLastItem - itemsPerPage.
* currentItems: indexOfFirstItem ile indexOfLastItem arasındaki öğeleri içeren veri dilimidir. Bu dilim, kullanıcının o an gördüğü veriyi temsil eder.

Bu temel kavramları anladıktan sonra, React’ta bir sayfalandırma bileşeni oluşturmaya başlayabiliriz.

React’ta Temel Bir Sayfalandırma Bileşeni Oluşturma

React’ta özel bir sayfalandırma bileşeni oluşturmak, genellikle bir ana bileşen (örneğin, ProductList veya BlogPosts) ve bir alt bileşen (Pagination) kullanarak yapılır. Ana bileşen, veriyi yönetirken, alt bileşen sayfalandırma kontrollerini render eder ve sayfa değişikliklerini ana bileşene bildirir.

Veri Durumu ve Sayfalandırma Parametreleri

Öncelikle, uygulamanızın ana bileşeninde (örneğin, App.js veya ProductList.js) sayfalandırma için gerekli durumları yönetmemiz gerekir. useState hook’u bu durumları yönetmek için idealdir.

import React, { useState, useEffect } from 'react';

// Örnek bir veri kümesi
const allItems = Array.from({ length: 100 }, (_, i) => Öğe ${i + 1});

function ProductList() {
  const [currentPage, setCurrentPage] = useState(1);
  const [itemsPerPage, setItemsPerPage] = useState(10); // Her sayfada 10 öğe göster

  // Toplam sayfa sayısını hesapla
  const totalPages = Math.ceil(allItems.length / itemsPerPage);

  // Mevcut sayfada gösterilecek öğeleri hesapla
  const indexOfLastItem = currentPage * itemsPerPage;
  const indexOfFirstItem = indexOfLastItem - itemsPerPage;
  const currentItems = allItems.slice(indexOfFirstItem, indexOfLastItem);

  // Sayfa değiştirme fonksiyonu
  const paginate = (pageNumber) => setCurrentPage(pageNumber);

  return (
    
    {currentItems.map((item, index) => (
  • {item}
  • ))}
{/ Sayfalandırma bileşeni buraya gelecek /}
); } export default ProductList;

Yukarıdaki örnekte:
* allItems: Uygulamanın tüm veri kümesini temsil eden basit bir dizi. Gerçek bir uygulamada bu veri genellikle bir API’den çekilir.
* currentPage: Mevcut sayfa numarasını tutar. Başlangıçta 1 olarak ayarlanmıştır.
* itemsPerPage: Her sayfada kaç öğe gösterileceğini belirler.
* totalPages: Toplam sayfa sayısıdır, allItems.length ve itemsPerPage kullanılarak hesaplanır.
* indexOfFirstItem, indexOfLastItem, currentItems: Mevcut sayfada gösterilecek öğeleri dilimlemek için kullanılan değişkenlerdir.
* paginate: currentPage durumunu güncelleyen bir fonksiyondur.

Sayfalandırma Mantığının Uygulanması

Pagination bileşenimiz, ProductList bileşeninden gerekli prop’ları alacak ve sayfa numarası düğmelerini render edecektir.

// Pagination.js
import React from 'react';

const Pagination = ({ itemsPerPage, totalItems, paginate, currentPage, totalPages }) => {
  const pageNumbers = [];

  for (let i = 1; i <= totalPages; i++) {
    pageNumbers.push(i);
  }

  return (
    
  );
};

export default Pagination;

Bu temel Pagination bileşeni:
* pageNumbers dizisini oluşturur. Bu dizi, 1’den totalPages‘a kadar olan tüm sayfa numaralarını içerir.
* Bu pageNumbers dizisini haritalayarak her bir sayfa numarası için bir liste öğesi (

  • ) ve bir bağlantı () oluşturur.
    * onClick olayında, paginate prop’unu çağırarak ana bileşendeki currentPage durumunu günceller.
    * Mevcut sayfayı vurgulamak için active sınıfını ekler.

    Bu yapıyla, kullanıcı sayfa numaralarına tıkladıkça currentPage durumu değişecek, bu da ProductList bileşeninin yeniden render edilmesine ve currentItems‘ın güncellenmesine neden olacaktır. Sonuç olarak, listedeki öğeler mevcut sayfaya göre değişecektir.

    Görsel Bileşenlerin Tasarımı

    Yukarıdaki örnekte basit bir

  • Yorumlar
    İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
    Yorum Yaz

    Bir yanıt yazın

    E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

    E-posta Bülteni
    Yazılım Topluluğuna Katılın
    En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.