Skip to Content
Docs▲ Next.jsRouting

Routing în Next.js

Next.js folosește un sistem de routing bazat pe fișiere. Structura folderelor din app/ definește automat URL-urile aplicației tale.

Conceptul de bază

Fiecare folder din app/ reprezintă un segment de URL, iar fișierul page.jsx din acel folder face ruta accesibilă public.

    • layout.jsx
    • page.jsx

Rute statice

// app/about/page.jsx → /about export default function AboutPage() { return <h1>Despre noi</h1> }
// app/blog/page.jsx → /blog export default function BlogPage() { return <h1>Blog</h1> }

Rute dinamice

Folosești [param] pentru segmente variabile:

// app/blog/[slug]/page.jsx → /blog/orice-slug export default async function BlogPost({ params }) { const { slug } = await params return <h1>Articol: {slug}</h1> }

Catch-all routes

// app/docs/[...path]/page.jsx → /docs/a/b/c export default async function DocsPage({ params }) { const { path } = await params // path = ['a', 'b', 'c'] return <p>Cale: {path.join('/')}</p> }

[[...path]] (cu paranteze duble) face segmentele opționale — ruta funcționează și fără ele. Nextra folosește exact acest pattern!

Layouts

Fișierul layout.jsx învelește toate paginile din același folder și sub-foldere. Nu se re-randează la navigare.

// app/blog/layout.jsx export default function BlogLayout({ children }) { return ( <div> <nav> <a href="/blog">Toate articolele</a> </nav> <main>{children}</main> </div> ) }
    • layout.jsx
      • layout.jsx
      • page.jsx

Folosește componenta <Link> în loc de <a> pentru navigare client-side rapidă:

import Link from 'next/link' export default function Nav() { return ( <nav> <Link href="/">Acasă</Link> <Link href="/about">Despre</Link> <Link href="/blog">Blog</Link> </nav> ) }
'use client' import { useRouter } from 'next/navigation' export default function LoginButton() { const router = useRouter() async function handleLogin() { await login() router.push('/dashboard') // redirect // router.replace('/dashboard') // fără history entry // router.back() // înapoi } return <button onClick={handleLogin}>Intră în cont</button> }

useRouter din next/navigation funcționează doar în Client Components (cu 'use client').

Route Groups

Poți organiza rutele fără a afecta URL-ul folosind paranteze (group):

Pagini speciale

FișierRol
page.jsxPagina publică a rutei
layout.jsxLayout persistent
loading.jsxUI de loading (Suspense automat)
error.jsxUI pentru erori
not-found.jsxPagina 404
// app/blog/loading.jsx export default function Loading() { return <p>Se încarcă articolele...</p> }
// app/blog/error.jsx 'use client' export default function Error({ error, reset }) { return ( <div> <p>Ceva a mers greșit: {error.message}</p> <button onClick={reset}>Încearcă din nou</button> </div> ) }
Last updated on