İçeriğe atla
devcards.space
ReactFrontend

React Router v7 Nedir? Declarative Routing Rehberi

React Router v7 ile React uygulamalarında declarative routing. BrowserRouter, Routes, Link, useNavigate, nested routes ve protected routes.

7 dakika okuma
React Router v7 infografiği: BrowserRouter, Routes, Link, useNavigate ve nested routes başlıklarını gösteren 13 bölümlü genel bakış

React Router, single-page React uygulamalarında URL yönetimi için yıllardır kullanılan ve v7 ile birlikte data-aware modlar gibi yeni özellikler kazanan bir kütüphanedir. JSX tabanlı declarative API'sini ve full SPA desteğini koruyarak Routes, Link, useNavigate, useParams ve Outlet gibi yapı taşlarıyla esnek bir routing katmanı sunar. Bu rehberde infografikteki 13 bölümü açarak temel kurulumdan protected routes'a kadar tüm akışı işliyoruz.

React Router Nedir?

React uygulamaları için bir routing kütüphanesidir. Sayfalar arasında geçişi etkinleştirir, full SPA desteği sağlar ve JSX ile çalışır.

  • React için routing kütüphanesi
  • Sayfalar arası geçiş
  • Full SPA desteği
  • JSX ile çalışır

Declarative Routing Nedir?

Route'larınızı JSX olarak tanımlarsınız ve UI yapısı doğal olarak rotalara eşlenir. Daha az boilerplate, daha iyi okunabilirlik anlamına gelir.

  • JSX ile route'ları tanımlar
  • Okunması ve bakımı kolay
  • Çoğu React projesi için ideal

Kurulum

Tek paket kurulumu yeterlidir; v7 framework olmadan da kullanılabilir.

bash
npm install react-router

Temel Kurulum

Uygulamanızı BrowserRouter ile sarmalayın; bu router'ın history API ile çalışmasını sağlar.

main.tsx
tsx
import { BrowserRouter } from "react-router";
import { App } from "./App";

createRoot(document.getElementById("root")!).render(
  <BrowserRouter>
    <App />
  </BrowserRouter>
);

Route Tanımlama (Declarative Mode)

Routes ve Route bileşenleri ile path-to-element eşleşmesini deklaratif şekilde yazarsınız.

tsx
import { Routes, Route } from "react-router";

<Routes>
  <Route path="/" element={<Home />} />
  <Route path="/about" element={<About />} />
  <Route path="/users/:id" element={<UserDetail />} />
</Routes>

Navigasyon: Link

Sayfalar arası geçiş için Link bileşeni kullanılır. Tıklamada tarayıcı yenilenmez; tamamen client-side gezinme yapılır.

tsx
import { Link } from "react-router";

<nav>
  <Link to="/">Ana sayfa</Link>
  <Link to="/about">Hakkında</Link>
</nav>

useNavigate Hook

Programatik navigasyon için useNavigate kullanılır. Form submit sonrası, login sonrası vb. yönlendirmeler için idealdir.

tsx
import { useNavigate } from "react-router";

const navigate = useNavigate();
navigate("/dashboard");
navigate(-1);            // geri
navigate("/users", { replace: true });

Route Parametreleri

:id gibi parametre tanımlanmış route'larda useParams ile değerleri okursunuz. Tipi tanımlamak için generic kullanmak iyi bir pratiktir.

tsx
import { useParams } from "react-router";

function UserDetail() {
  const { id } = useParams();
  return <p>Kullanıcı id: {id}</p>;
}

Nested Routes

Route içinde Route yazarak iç içe rotalar tanımlanır. Parent component, child route'ları Outlet ile render eder.

tsx
<Routes>
  <Route path="dashboard" element={<DashboardLayout />}>
    <Route index element={<Overview />} />
    <Route path="settings" element={<Settings />} />
  </Route>
</Routes>

Outlet

Outlet, child route'un render edileceği yer için bir placeholder'dır. Layout componentlerinin parça-parça UI yapmasını sağlar.

tsx
import { Outlet } from "react-router";

export function DashboardLayout() {
  return (
    <>
      <Sidebar />
      <main>
        <Outlet />
      </main>
    </>
  );
}

Protected Routes

Auth gerektiren rotaları sarmalamak için bir wrapper component yazılır. Kullanıcı yetkisizse Navigate ile login sayfasına yönlendirilir.

tsx
function ProtectedRoute({ children }: { children: React.ReactNode }) {
  const isAuth = useAuth();
  if (!isAuth) return <Navigate to="/login" replace />;
  return <>{children}</>;
}

<Route
  path="/dashboard"
  element={
    <ProtectedRoute>
      <Dashboard />
    </ProtectedRoute>
  }
/>

Temel Kavramlar

API'nin omurgası şu birkaç parçadır:

  • Routes & Route — path/element eşlemesi
  • Link — declarative navigation
  • useNavigate — programatik navigasyon
  • useParams — URL parametreleri
  • Outlet — child route placeholder
  • Conditional routing — protected/redirect

Özet

React Router v7; declarative ve readable JSX-tabanlı routing sunar. Kurulumu kolay, ölçeklenmesi kolaydır ve çoğu React projesi için yeterlidir. Next.js kullanmıyorsanız SPA'larda standart tercihtir.

Sıkça Sorulan Sorular

Bu konuda en çok merak edilenler.

React Router v6 ile v7 farkı nedir?

v7 paket adını react-router olarak sadeleştirir, framework modu (Remix mirası) ve data-aware route'lar gibi yenilikler getirir. Declarative kullanım ise neredeyse aynıdır; mevcut projeler kolayca yükseltilir.

Next.js varken React Router gerekir mi?

Hayır. Next.js dosya tabanlı routing'e sahiptir. React Router yalnızca pure SPA veya Vite/CRA gibi framework'süz kurulumlarda kullanılır.

404 sayfası nasıl yapılır?

Route'ların sonunda <Route path="*" element={<NotFound />} /> tanımlamanız yeterli. Eşleşen rota olmadığında bu component gösterilir.

Query string'ler nasıl yönetilir?

useSearchParams hook'u get/set API'si sunar. Filtre, sayfa, sort gibi state'ler URL'de tutulduğunda paylaşılabilir ve geri tuşuyla uyumlu olur.

Code splitting nasıl yaparım?

React.lazy + Suspense ile route bileşenlerini lazy-load edersiniz. v7 framework modunda rota başına otomatik bölme de mümkündür.

Bu konuyla bağlantılı diğer infografikler.

Daha fazla developer infografiği keşfedin

Yeni içerikleri kaçırmamak için ana sayfayı ziyaret edin.

Tüm infografikleri gör