ViraStack
  • Akademi
  • Hakkında
  • Destek
Genel BakışKaynaklarKatkı
ViraStack

Frontend ekosistemi: ücretsiz rehberler, proje şablonları, AI kuralları ve form bileşenleri.

Ürünler

  • ViraStack Start
  • ViraStack AI
  • ViraStack Mask
  • ViraStack Password
  • ViraStack Guide

Keşfet

  • Akademi
  • Hakkında
  • Marka
  • Destek

© 2026 ViraStack.

Açık kaynak · MIT

Next.js

02 / 12

Routing ve layout

Sayfa, layout, dinamik segment, route group ve Link ile gezinme.

Klasör = Adres

App Router dosya tabanlıdır. Her klasör URL'de bir segment, klasördeki page.tsx o adresin sayfasıdır.1

app/
├── layout.tsx              # tüm sayfaları sarar
├── page.tsx                # /
└── products/
    ├── layout.tsx          # /products ve altını sarar
    ├── page.tsx            # /products
    └── [slug]/
        └── page.tsx        # /products/canvas-sneaker

Layout: Gezinmede Kalan Arayüz

Layout, alt sayfaları children olarak sarar. Kullanıcı /products/a'dan /products/b'ye geçtiğinde ortak layout yeniden render edilmez; state'i ve scroll'u korunur, yalnızca sayfa değişir.1

// app/products/layout.tsx
export default function ProductsLayout({ children }: LayoutProps<"/products">) {
  return (
    <section>
      <aside>Kategoriler</aside>
      {children}
    </section>
  );
}

LayoutProps ve PageProps import etmeden kullandığınız global tiplerdir. Next.js onları next dev, next build ya da next typegen sırasında klasörlerinizden üretir; params tipini elle yazmazsınız.1

Layout yeniden render edilmediği için iki sınırı vardır:2

  • searchParams alamaz; değer bayatlardı. URL parametresini sayfada ya da bir Client Component'te useSearchParams ile okuyun.

  • Aktif menü için pathname alamaz. Linkleri usePathname kullanan küçük bir Client Component'e taşıyın.

Uyarı

Oturum kontrolünü layout'a koymayın. Layout gezinmede tekrar çalışmadığı için her alt sayfayı korumaz. Kontrolü veriye yakın yapın; Next.js'te auth dersi bunu ayrıntılı anlatıyor.

Dinamik Segment

Köşeli parantezli klasör veriden üretilen sayfalar içindir:3

KlasörEşleşen adres
[slug]/products/canvas-sneaker
[...slug]/shop/shoes, /shop/shoes/sneakers
[[...slug]]/docs, /docs/setup, /docs/setup/node
// app/products/[slug]/page.tsx
export default async function ProductPage({ params }: PageProps<"/products/[slug]">) {
  const { slug } = await params;
  const product = await getProduct(slug);

  return <h1>{product?.name}</h1>;
}

params ve searchParams bir Promise'tir; await etmeden kullanamazsınız. Eski tutorial'larda params.slug diye doğrudan okunur; Next.js 15'ten beri bu değişti.4

İpucu

Bu ve sonraki birkaç dersteki örnekler kısa olsun diye params'ı sayfanın en üstünde okuyor. Partial Prefetching açıkken Next.js geliştirmede bunu bir uyarıyla işaretler; çünkü bir rotaya giden bütün linkler tek bir kabuğu paylaşır. Gerçek projede params'ı <Suspense> içindeki bir child'da okuyun. Nedeni Navigasyon ve prefetch dersinde.5

searchParams: Sayfada mı, İstemcide mi

İhtiyaçKullanın
Filtre ve sayfalamayla sunucudan veri çekmekSayfanın searchParams prop'u
Zaten yüklenmiş bir listeyi istemcide süzmekuseSearchParams hook'u

searchParams okumak sayfanın o kısmını istek anına bağlar. Cache Components ile bunu bir <Suspense> içinde yapmanız gerekir; nedenini Cache ve render modeli dersinde göreceksiniz.1

Route Group ve Birden Fazla Layout

Parantezli klasör URL'ye eklenmez ama kendi layout'una sahip olabilir. Mağaza ve pazarlama sayfalarına farklı üst menü vermek için:6

app/
├── (marketing)/
│   ├── layout.tsx          # pazarlama menüsü
│   └── about/page.tsx      # /about
└── (shop)/
    ├── layout.tsx          # mağaza menüsü ve sepet
    └── cart/page.tsx       # /cart

Kök app/layout.tsx'i silip her gruba kendi <html>'li layout'unu verirseniz birden fazla kök layout kurarsınız. Gruplar arasında geçişte sayfa tamamen yeniden yüklenir.6

Link ile Gezinme

<Link>, <a>'yı genişletir. Görünür linklerin hedefini arka planda prefetch eder ve tıklamada sayfayı yenilemeden geçiş yapar; ortak layout'lar yerinde kalır.7

import Link from "next/link";

<Link href={`/products/${product.slug}`}>{product.name}</Link>;

Kodla yönlendirme için useRouter kullanılır. Doğru import yeri next/navigation'dır. next/router eski Pages Router'a aittir ve App Router'da çalışmaz.8 AI araçları bu ikisini sık karıştırır.

Arama gibi URL'ye parametre yazan formlar için next/form var. <form> gibi davranır ama gönderimi istemci tarafı gezinmeye çevirir ve JavaScript yüklenmeden de çalışır:9

import Form from "next/form";

<Form action="/products">
  <input name="q" aria-label="Ürün ara" />
  <button>Ara</button>
</Form>;

İpucu

next.config.ts'te typedRoutes: true açarsanız <Link href="/prodcts"> gibi yazım hataları tip hatası olur.10

İleri Kalıplar

İki kalıp belirli arayüzler içindir, her projede gerekmez:1112

KalıpKlasörÖrnek
Parallel route@cart/Aynı layout'ta bağımsız yüklenen iki bölüm
Intercepting route(.)photo/[id]Listeden açılan fotoğrafı modal olarak göstermek, linki paylaşınca tam sayfa

Kendin Dene

  • app/products/[slug]/page.tsx'te params'ı await etmeden params.slug diye okuyun. TypeScript ne diyor?

  • products/layout.tsx'e bir sayaç butonu (Client Component) ekleyin. İki ürün arasında gezinin; sayaç sıfırlanıyor mu?

  • Aktif menü linkini usePathname ile işaretleyen bir NavLink yazın.

  • typedRoutes'u açıp var olmayan bir adrese link verin.

Detaylı Öğrenmek İçin

  • Resmi doküman: "Layouts and Pages" ve "Linking and Navigating" sayfaları; prefetch, streaming ve istemci tarafı geçişin birlikte nasıl çalıştığını anlatır.17

  • Resmi doküman: layout.js referansının "Caveats" bölümü; layout'un neden searchParams ve pathname almadığını örneklerle gösterir.2

  • Resmi doküman: Next.js Learn kursunun layout ve navigasyon bölümleri.13

Kaynaklar

  • 1DokümanNext.js: Layouts and Pages

    Sayfa, iç içe layout, dinamik segment, `searchParams` ve `PageProps`/`LayoutProps` yardımcıları.

  • 2DokümanNext.js: layout.js

    Layout'un yeniden render edilmemesi, `searchParams` ve `pathname` sınırları, aktif link örneği.

  • 3DokümanNext.js: Dynamic Route Segments

    `[slug]`, catch-all ve optional catch-all segmentler.

  • 4DokümanNext.js: Upgrading to Version 15

    `params`, `searchParams`, `cookies` ve `headers`'ın async olması.

  • 5DokümanNext.js: Adopting Partial Prefetching

    URL verisinin paylaşılan App Shell'e girmemesi ve `params`'ı `<Suspense>` içine taşımak.

  • 6DokümanNext.js: Route Groups

    URL'yi etkilemeden gruplama, gruba özel layout ve birden fazla kök layout.

  • 7DokümanNext.js: Linking and Navigating

    Prefetch, streaming, istemci tarafı geçiş ve yavaş geçişin nedenleri.

  • 8DokümanNext.js: useRouter

    `next/navigation`'dan import, `push`, `replace`, `refresh` ve Pages Router farkı.

  • 9DokümanNext.js: Form Component

    URL parametresi yazan formlar, istemci tarafı gezinme ve progressive enhancement.

  • 10DokümanNext.js: TypeScript

    `typedRoutes` ile tip güvenli linkler.

  • 11DokümanNext.js: Parallel Routes

    `@slot` klasörleri ve `default.tsx`.

  • 12DokümanNext.js: Intercepting Routes

    `(.)`, `(..)` kalıpları ve modal örneği.

  • 13DokümanNext.js: Learn, Creating Layouts and Pages

    Kursun layout ve sayfa bölümü.

Bu sayfayı düzenle

Son güncelleme tarihi: 21 Ekim 2026

Önceki adım01. Kurulum ve proje yapısıSonraki adım03. Server ve Client Components