Parallel Routes
Paralel Rotalar, aynı düzen içinde bir veya daha fazla sayfayı eşzamanlı veya koşullu olarak oluşturmanıza olanak tanır. Bir uygulamanın gösterge tabloları ve sosyal sitelerdeki beslemeler gibi son derece dinamik bölümleri için kullanışlıdırlar.
Örneğin, bir gösterge tablosunu ele alırsak, team ve analytics sayfalarını aynı anda
işlemek için paralel rotalar kullanabilirsiniz:

Slots
Paralel rotalar adlandırılmış yuvalar kullanılarak oluşturulur. Yuvalar @folder konvansiyonu
ile tanımlanır. Örneğin, aşağıdaki dosya yapısı iki yuva tanımlar: @analytics ve
@team:

Yuvalar, paylaşılan üst düzene prop olarak aktarılır. Yukarıdaki örnekte, app/layout.js adresindeki bileşen
artık @analytics ve @team yuva prop'larını kabul eder ve bunları
children prop'uyla birlikte paralel olarak oluşturabilir:
export default function Layout(props: {
children: React.ReactNode
analytics: React.ReactNode
team: React.ReactNode
}) {
return (
<>
{props.children}
{props.team}
{props.analytics}
</>
)
}
Ancak, yuvalar rota segmentleri
değildir ve URL yapısını etkilemez. Örneğin, /dashboard/@analytics/views için URL,
@analytics bir yuva olduğu için /dashboard/views olacaktır.
Bildiğim iyi oldu:
childrenprop, bir klasörle eşleştirilmesi gerekmeyen örtük bir yuvadır. Bu,app/page.js'unapp/@children/page.jsile eşdeğer olduğu anlamına gelir.
Active state and navigation
Next.js varsayılan olarak her bir slot için aktif durumu (veya alt sayfayı) takip eder. Ancak, bir slot içinde işlenen içerik navigasyon türüne bağlı olacaktır:
- Yumuşak Navigasyon: İstemci tarafında gezinme sırasında Next.js kısmi bir render işlemi gerçekleştirerek slot içindeki alt sayfayı değiştirirken, mevcut URL ile eşleşmeseler bile diğer slotun aktif alt sayfalarını korur.
-
Zor Navigasyon: Tam sayfa yüklemeden (tarayıcı yenileme) sonra Next.js, geçerli URL ile eşleşmeyen yuvaların etkin
durumunu belirleyemez. Bunun yerine, bir
default.jseşleşmeyen yuvalar için dosya veyadefault.jsyoksa404.
Bildiğim iyi oldu:
- Eşleşmeyen rotalar için
404adresi, paralel olarak işlenmemesi gereken bir rotayı yanlışlıkla işlememenizi sağlamaya yardımcı olur.
default.js
İlk yükleme veya tam sayfa yeniden yükleme sırasında eşleşmeyen yuvalar için yedek olarak işlenecek bir
default.js dosyası tanımlayabilirsiniz.
Aşağıdaki klasör yapısını düşünün. @team yuvasında bir settings sayfası var, ancak
@analytics yok.

/dashboard/settings adresine gidildiğinde, @team yuvası
settings sayfasını oluştururken @analytics yuvası için o anda etkin olan sayfayı
koruyacaktır.
Yenileme sırasında Next.js, @analytics için bir default.js oluşturur.
default.js mevcut değilse, bunun yerine bir 404 oluşturulur.
Ayrıca, children örtük bir yuva olduğundan, Next.js ana sayfanın etkin durumunu kurtaramadığında
children için bir geri dönüş oluşturmak üzere bir default.js dosyası da oluşturmanız
gerekir.
useSelectedLayoutSegment(s)
Her ikisi de
useSelectedLayoutSegment
ve
useSelectedLayoutSegments
bir slot içindeki aktif rota segmentini okumanızı sağlayan bir parallelRoutesKey parametresini kabul eder.
'use client'
import { useSelectedLayoutSegment } from 'next/navigation'
export default function Layout(props: {
//...
auth: React.ReactNode
}) {
const loginSegments = useSelectedLayoutSegment('auth')
// ...
}
Bir kullanıcı app/@auth/login (veya URL çubuğunda /login ) adresine gittiğinde,
loginSegments dizesi "login" dizesine eşit olacaktır.
Examples
Modals
Paralel Yönlendirme, modları işlemek için kullanılabilir.

@auth yuvası, örneğin /login gibi eşleşen bir rotaya gidilerek gösterilebilecek bir
<Modal> bileşeni oluşturur.
export default async function Layout(props: {
// ...
auth: React.ReactNode
}) {
return (
<>
{/* ... */}
{props.auth}
</>
)
}
import { Modal } from 'components/modal'
export default function Login() {
return (
<Modal>
<h1>Login</h1>
{/* ... */}
</Modal>
)
}
Modal etkin olmadığında içeriğinin işlenmemesini sağlamak için null adresini döndüren bir
default.js dosyası oluşturabilirsiniz.
export default function Default() {
return null
}
Dismissing a modal
İstemci gezintisi yoluyla, örneğin <Link href="/login"> kullanılarak bir modal başlatılmışsa,
router.back() adresini çağırarak veya bir Link bileşeni kullanarak modalı
kapatabilirsiniz.
'use client'
import { useRouter } from 'next/navigation'
import { Modal } from 'components/modal'
export default function Login() {
const router = useRouter()
return (
<Modal>
<span onClick={() => router.back()}>Close modal</span>
<h1>Login</h1>
...
</Modal>
)
}
Kipler hakkında daha fazla bilgi Yakalama Yolları bölümünde ele alınmıştır.
Başka bir yere gitmek ve bir modalı kapatmak istiyorsanız, her şeyi kapsayan bir rota da kullanabilirsiniz.

export default function CatchAll() {
return null
}
Tümünü yakalama rotaları
default.jsadresinden önceliklidir.
Conditional Routes
Paralel Rotalar ayrıca kimlik doğrulama durumu gibi belirli koşullara bağlı olarak bir yuvayı koşullu olarak oluşturmanıza olanak tanır.
Örneğin, kullanıcının oturum açıp açmadığına bağlı olarak bir /dashboard veya
/login sayfası oluşturabilirsiniz:

Paralel Rotalar koşullu yönlendirme uygulamak için kullanılabilir. Örneğin, kimlik doğrulama durumuna bağlı olarak bir
@dashboard veya @login rotası oluşturabilirsiniz.
import { getUser } from '@/lib/auth'
export default function Layout({
dashboard,
login,
}: {
dashboard: React.ReactNode
login: React.ReactNode
}) {
const isLoggedIn = getUser()
return isLoggedIn ? dashboard : login
}

Streaming
Paralel Rotalar bağımsız olarak akıtılabilir, böylece her rota için bağımsız hata ve yükleme durumları tanımlayabilirsiniz:
