layout.js در Next.js — ساختاردهی صفحات با انعطاف و هوشمندی

فایل layout.js در Next.js برای تعریف ساختار صفحات استفاده می‌شود. این فایل می‌تواند شامل layoutهای محلی یا root layout باشد و از طریق props مانند children و params، محتوا و پارامترهای داینامیک را دریافت کند. این مقاله نحوهٔ استفاده از layoutها، مدیریت پارامترها، ادغام با کامپوننت‌های کلاینتی، و نکات مهم در عملکرد و کشینگ را آموزش می‌دهد.

layout.jsRoot LayoutDynamic ParamsClient Components

~2 دقیقه مطالعه · آخرین به‌روزرسانی ۷ آبان ۱۴۰۴

۱. تعریف layout در Next.js


فایل layout.js برای تعریف ساختار صفحات استفاده می‌شود. این فایل باید prop children را دریافت کند تا محتوای داخلی را نمایش دهد.

// app/dashboard/layout.tsx
export default function DashboardLayout({ children }) {
  return <section>{children}</section>
}

۲. Root Layout — ساختار اصلی اپلیکیشن


فایل app/layout.tsx باید شامل تگ‌های html و body باشد و ساختار کلی اپلیکیشن را تعریف کند.

// app/layout.tsx
export default function RootLayout({ children }) {
  return (
    <html lang="en">
      <body>{children}</body>
    </html>
  )
}

۳. دریافت پارامترهای داینامیک با props


layoutها می‌توانند prop params را دریافت کنند که شامل پارامترهای مسیر داینامیک است.

// app/dashboard/[team]/layout.tsx
export default async function Layout({ children, params }) {
  const { team } = await params
  return (
    <section>
      <h1>Welcome to {team}'s Dashboard</h1>
      {children}
    </section>
  )
}

۴. استفاده از LayoutProps برای تایپ بهتر


با استفاده از LayoutProps می‌توان تایپ دقیق‌تری برای props و slotها داشت.

export default function Layout(props: LayoutProps<'/dashboard'>) {
  return (
    <section>
      {props.children}
      {/* props.analytics if @analytics slot exists */}
    </section>
  )
}

۵. نکات مهم در عملکرد و کشینگ


  • Layoutها کش می‌شوند و در ناوبری مجدد رندر نمی‌شوند.
  • برای دسترسی به request، از cookies() یا headers() استفاده کنید.
  • برای دریافت query params، از useSearchParams() در کامپوننت کلاینتی استفاده کنید.
  • برای دریافت pathname، از usePathname() در کامپوننت کلاینتی استفاده کنید.

۶. نمایش محتوا بر اساس params


با استفاده از پارامترهای داینامیک می‌توان محتوا را شخصی‌سازی کرد.

// app/dashboard/layout.tsx
export default async function Layout({ children, params }) {
  const { team } = await params
  return (
    <section>
      <header><h1>Welcome to {team}'s Dashboard</h1></header>
      <main>{children}</main>
    </section>
  )
}

۷. استفاده از params در کامپوننت کلاینتی


در کامپوننت‌های کلاینتی، می‌توان از use() برای خواندن params استفاده کرد.

'use client'
import { use } from 'react'

export default function Page({ params }) {
  const { slug } = use(params)
}

جمع‌بندی


فایل layout.js در Next.js نقش کلیدی در ساختاردهی صفحات دارد. با استفاده از props مانند children و params، می‌توان صفحات پویا، قابل کش، و قابل شخصی‌سازی ساخت. ادغام با کامپوننت‌های کلاینتی نیز امکان دریافت اطلاعات به‌روز را فراهم می‌کند.


نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

مسیریابی پیشرفته و هوک‌های عملکرد در Next.js — راهنمای توسعه‌دهنده برای App Router

Next.js مجموعه‌ای غنی از هوک‌های کلاینت و ابزارهای کش و ناوبری را در اختیار توسعه‌دهندگان قرار می‌دهد. از خواندن پارامترهای مسیر تا گزارش Web Vitals و مدیریت کش، این مقاله مهم‌ترین ابزارهای App Router را با مثال‌های کاربردی معرفی می‌کند.

ادامه

مدیریت احراز هویت و کش در Next.js — راهنمای توسعه‌دهنده برای امنیت و عملکرد پویا

Next.js با معرفی قابلیت‌های آزمایشی جدید، امکان کنترل دقیق‌تر دسترسی و کش داده‌ها را فراهم کرده است. تابع unauthorized برای مدیریت خطای 401 و هدایت کاربران به صفحه ورود، unstable_cache برای کش هوشمند عملیات سنگین، updateTag برای بازسازی آنی داده‌ها، و useLinkStatus برای نمایش وضعیت ناوبری استفاده می‌شوند. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات مهم بررسی می‌کند.

ادامه

redirect و refresh در Next.js — ریدایرکت‌های هوشمند و تازه‌سازی مسیر در Server Actions

تابع redirect در Next.js برای هدایت کاربر به مسیر جدید استفاده می‌شود و بسته به نوع استفاده، پاسخ HTTP با وضعیت 307 یا 303 ارسال می‌کند. این تابع در Server Components، Client Components، Route Handlers و Server Actions قابل استفاده است. تابع refresh نیز برای تازه‌سازی مسیر کلاینت از درون Server Action استفاده می‌شود. این مقاله نحوه استفاده از هر دو تابع را با مثال‌های کاربردی و نکات مهم توضیح می‌دهد.

ادامه

Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

Next.js با معرفی NextRequest و NextResponse، APIهای Request و Response مرورگر را گسترش داده و ابزارهای قدرتمندی برای مدیریت کوکی‌ها، هدرها، ریدایرکت‌ها، بازنویسی مسیرها و پاسخ‌های JSON فراهم کرده است. این مقاله نحوه استفاده از این ابزارها را با مثال‌های کاربردی و نکات امنیتی توضیح می‌دهد.

ادامه

headers، ImageResponse، notFound و permanentRedirect در Next.js — مدیریت درخواست‌ها، تولید تصویر، خطا و ریدایرکت

Next.js ابزارهای قدرتمندی برای مدیریت درخواست‌ها و پاسخ‌ها در کامپوننت‌های سروری فراهم کرده است. تابع headers برای خواندن هدرهای HTTP ورودی، ImageResponse برای تولید تصاویر داینامیک، notFound برای نمایش صفحه خطای 404، و permanentRedirect برای ریدایرکت دائمی کاربران استفاده می‌شوند. این مقاله نحوه استفاده از هر یک را با مثال‌های کاربردی توضیح می‌دهد.

ادامه

راهنمای کامل استفاده از metadata و generateMetadata در Next.js

در نسخه‌های مدرن Next.js، مدیریت metadata صفحات بسیار قدرتمندتر و ساده‌تر شده است. metadata به‌صورت خودکار در تگ <head> صفحات تزریق می‌شود و نقش مهمی در SEO، اشتراک‌گذاری اجتماعی و تجربه کاربری دارد. این مقاله دو روش اصلی تعریف metadata را بررسی می‌کند: استفاده از آبجکت ثابت metadata و تابع داینامیک generateMetadata.

ادامه