React İle Web Uygulamaları İçin Dinamik Bir Breadcrumb Gezinme Menüsü Nasıl Yapılır?

Gereksinimler ve Ön Hazırlık

Bu projeye başlamadan önce bilgisayarınızda Node.js'in güncel LTS sürümünün yüklü olduğundan emin olmalısınız. React projenizi başlatmak ve gerekli yönlendirme kütüphanelerini kurmak için terminalinizde aşağıdaki komutları çalıştırmanız gerekmektedir.

npx create-react-app breadcrumb-app
cd breadcrumb-app
npm install react-router-dom

Bu kurulum adımı, uygulamanızın temel çatısını oluşturur ve URL yönetimini yapmamızı sağlayacak olan react-router-dom kütüphanesini projenize dahil eder. Projenizi çalışır hale getirdikten sonra, dizin yapınızın temiz olduğundan ve src klasörü altında components adında bir klasör açtığınızdan emin olun.

Adım Adım Dinamik Breadcrumb Mantığını Kurma

Dinamik bir breadcrumb yapısı için URL yolunu (pathname) parçalara ayırmalı ve her bir parçayı bir "breadcrumb" öğesine dönüştürmeliyiz. Örneğin, /kullanici/profil/ayarlar URL'si için "Kullanıcı", "Profil" ve "Ayarlar" şeklinde bir dizi oluşturacağız.

Aşağıdaki kod bloğu, mevcut URL yolunu alıp bir diziye dönüştüren temel mantığı içermektedir.

const getBreadcrumbs = (pathname) => {
  const pathnames = pathname.split('/').filter((x) => x);
  return pathnames.map((value, index) => {
    const to = `/${pathnames.slice(0, index + 1).join('/')}`;
    return { label: value, path: to };
  });
};

Bu fonksiyon, URL'deki eğik çizgileri (slash) temizler ve her bir segmenti bir nesne olarak döndürür. Bu sayede hem görünen metni (label) hem de yönlendirilecek yolu (path) elde etmiş oluyoruz.

React Bileşeni Olarak Breadcrumb Tasarımı

Şimdi bu mantığı görsel bir React bileşenine dönüştürelim. Bileşenimiz, useLocation hook'unu kullanarak mevcut URL'yi takip edecek ve her rota değişiminde otomatik olarak güncellenecektir.

import { Link, useLocation } from 'react-router-dom';

const Breadcrumbs = () => {
  const location = useLocation();
  const breadcrumbs = getBreadcrumbs(location.pathname);

  return (
    
      
  1. Anasayfa
  2. {breadcrumbs.map((crumb, index) => (
  3. / {crumb.label.toUpperCase()}
  4. ))}
); };

Burada aria-label kullanımı, web erişilebilirliği (accessibility) standartlarına uygunluk için zorunludur. Ekran okuyucular, bu menünün bir gezinme yolu olduğunu bu etiket sayesinde anlar.

Breadcrumb Yapısında Karşılaştırma Tablosu

Dinamik breadcrumb oluştururken kullanabileceğiniz farklı yöntemlerin karşılaştırması aşağıdadır:

Yöntem Avantaj Dezavantaj
Statik Tanımlama Basit ve hızlı Bakımı zor, ölçeklenemez
URL Tabanlı Dinamik Otomatik ve esnek URL'lerin temiz olması gerekir
Rota Yapılandırması (Config) Tam kontrol sağlar Daha fazla kod gerektirir

Yaygın Hatalar ve Hata Ayıklama (Debug) İpuçları

En sık yapılan hatalardan biri, URL'deki parametrelerin (örneğin /urun/123) breadcrumb'da karmaşık görünmesidir. Bunu engellemek için bir "mapping" nesnesi kullanabilirsiniz. Ayrıca, key prop'unu yanlış atamak React'in performansını düşürebilir; her zaman benzersiz bir yol (path) kullanın.

Güvenlik Uyarısı: Breadcrumb içerisinde kullanıcıdan gelen verileri (örneğin URL parametrelerini) doğrudan HTML olarak render etmeyin. Bu, XSS (Cross-Site Scripting) saldırılarına kapı açabilir. Verileri mutlaka temizleyerek (sanitize) ekrana basın.

Breadcrumb Bileşenini Özelleştirme

Breadcrumb'larınızı daha profesyonel hale getirmek için URL parametrelerini anlamlı isimlerle değiştirebilirsiniz. Bunun için bir sözlük (dictionary) yaklaşımı kullanın.

const routeNames = {
  'kullanici': 'Kullanıcı Paneli',
  'profil': 'Kişisel Bilgiler',
  'ayarlar': 'Hesap Ayarları'
};

// Breadcrumb render edilirken:
// {routeNames[crumb.label] || crumb.label}

Bu yaklaşım, URL yapınız teknik (İngilizce/kısa) olsa bile, kullanıcıya daha anlamlı ve Türkçe başlıklar sunmanızı sağlar.

Sıkça Sorulan Sorular

Breadcrumb neden SEO için önemlidir?

Arama motorları, breadcrumb yapısını sitenizin hiyerarşisini anlamak ve arama sonuçlarında (SERP) daha zengin bir görünüm (rich snippets) sunmak için kullanır.

React Router 7 ile breadcrumb kullanımı değişti mi?

React Router'ın yeni sürümleri, useMatches hook'u ile rotaların meta verilerine erişmeyi kolaylaştırmıştır. Bu, daha karmaşık projeler için önerilen yöntemdir.

Mobil cihazlarda breadcrumb nasıl görünmeli?

Mobil ekranlarda yer kazanmak için sadece "Geri" butonu veya sadece son iki seviyeyi gösterecek şekilde CSS medya sorguları (media queries) ile gizleme yapabilirsiniz.

Breadcrumb'larda neden Link bileşeni kullanıyoruz?

Link bileşeni, sayfa yenilenmeden (SPA mantığıyla) rotayı değiştirdiği için uygulamanın hızını ve kullanıcı deneyimini artırır.

Breadcrumb'ı her sayfada nasıl otomatik gösterebilirim?

Breadcrumb bileşenini ana App.js veya Layout bileşeninizin en üstüne yerleştirerek tüm alt sayfalarda otomatik görünmesini sağlayabilirsiniz.

Breadcrumb Yapısında Performans Optimizasyonu ve Memoization

Dinamik breadcrumb yapıları, her rota değişiminde yeniden hesaplanır. Eğer uygulamanız çok derin bir ağaç yapısına sahipse veya breadcrumb bileşeniniz karmaşık veri işleme süreçleri barındırıyorsa, gereksiz render işlemlerini engellemek performansı doğrudan etkiler. React'in useMemo ve React.memo kancalarını kullanarak bileşenin yalnızca URL değiştiğinde güncellenmesini sağlayabilirsiniz.

import React, { useMemo } from 'react';
import { useLocation } from 'react-router-dom';

const Breadcrumb = React.memo(({ routes }) => {
  const location = useLocation();

  const breadcrumbs = useMemo(() => {
    const pathnames = location.pathname.split('/').filter((x) => x);
    return pathnames.map((value, index) => {
      const last = index === pathnames.length - 1;
      const to = `/${pathnames.slice(0, index + 1).join('/')}`;
      return { label: value, to, last };
    });
  }, [location.pathname]);

  return (
    
      
    {breadcrumbs.map((crumb) => (
  1. {crumb.last ? crumb.label : {crumb.label}}
  2. ))}
); });

Breadcrumb İçin Birim Testi (Unit Testing) Stratejileri

Breadcrumb bileşeninin doğru çalışıp çalışmadığını doğrulamak için Jest ve React Testing Library kullanmak, özellikle büyük ölçekli projelerde kırılmaları önler. Testlerinizde farklı URL senaryolarını simüle ederek, bileşenin doğru linkleri ve etiketleri üretip üretmediğini kontrol etmelisiniz.

Aşağıdaki örnek, breadcrumb'ın belirli bir URL'de doğru sayıda link öğesi oluşturup oluşturmadığını test eder:

import { render, screen } from '@testing-library/react';
import { MemoryRouter } from 'react-router-dom';
import Breadcrumb from './Breadcrumb';

test('breadcrumb doğru sayıda link oluşturmalı', () => {
  render(
    
      
    
  );

  const links = screen.getAllByRole('link');
  // 'kategori' ve 'elektronik' link olmalı, 'laptop' aktif (link değil) olmalı
  expect(links).toHaveLength(2);
  expect(screen.getByText(/laptop/i)).toBeInTheDocument();
});

Test Sürecinde Dikkat Edilmesi Gerekenler

  • Mock Router: Test ortamında MemoryRouter kullanarak farklı URL yollarını kolayca simüle edebilirsiniz.
  • Aria-Label Kontrolü: Erişilebilirlik (a11y) standartlarına uygunluğu doğrulamak için getByLabelText sorgularını kullanın.
  • Edge Case (Uç Durumlar): Ana sayfa (root) durumu ve çok uzun URL parametreleri için test senaryoları oluşturun.

İleri Seviye: Breadcrumb Verilerini İsimlendirme (Mapping)

URL'deki /kullanici-ayarlari/guvenlik gibi teknik yollar yerine, kullanıcıya daha anlamlı başlıklar göstermek için bir sözlük (mapping) yapısı kullanmak profesyonel bir yaklaşımdır. Bu sayede URL yapınızdan bağımsız olarak breadcrumb metinlerini yönetebilirsiniz.

const routeMap = {
  'kullanici-ayarlari': 'Kullanıcı Ayarları',
  'guvenlik': 'Güvenlik ve Gizlilik',
  'profil': 'Profilim'
};

// Breadcrumb render edilirken:
const label = routeMap[value] || value.charAt(0).toUpperCase() + value.slice(1);

Bu yöntem, SEO uyumlu URL'ler ile kullanıcı dostu arayüz metinlerini birbirinden ayırmanıza olanak tanır ve uygulamanızın yerelleştirme (i18n) süreçlerini kolaylaştırır.

Sonuç

React ile dinamik bir breadcrumb menüsü oluşturmak, uygulamanızın profesyonellik seviyesini bir üst noktaya taşır. Bu rehberde öğrendiğiniz URL tabanlı dinamik yapı, projenizin büyüme hızına uyum sağlayacak esnek bir temel sunar. Bir sonraki adım olarak, breadcrumb verilerini merkezi bir state yönetim aracı (Context API veya Redux) ile yönetmeyi veya rotalarınıza özel meta veriler ekleyerek breadcrumb'ları daha zengin hale getirmeyi deneyebilirsiniz.

Kod güvenliği sorumluluk reddi: Bu rehberde paylaşılan kodlar eğitim amaçlıdır. Üretim ortamına (production) almadan önce, özellikle kullanıcı girişi ve URL parametreleri ile ilgili tüm verilerin XSS ve veri sızıntılarına karşı doğrulandığından ve sanitize edildiğinden emin olunuz.

Bu yazıya tepkinizi paylaşın:
Deniz Arslan

On yıldır dijital içerik üretimi ve editörlük alanında çalışıyorum. Karmaşık süreçleri herkesin anlayabileceği basit ve adım adım rehberlere dönüştürme konusunda uzmanım.

Yorumlar (0)

Yorum Yaz