React Academy · บทเรียน

เส้นทางแบบไดนามิกและกลุ่มเส้นทาง

สร้างเซกเมนต์แบบไดนามิก [slug] กลุ่มเส้นทางด้วย (folder) และเส้นทางแบบขนาน

บทเรียน 3 จาก 412 ขั้นตอน

เส้นทางแบบไดนามิกและกลุ่มเส้นทาง เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

เซกเมนต์แบบไดนามิก

ครอบชื่อโฟลเดอร์ด้วยวงเล็บเหลี่ยมเพื่อสร้างเซกเมนต์แบบไดนามิก ค่านี้จะอยู่ใน params ที่ส่งให้หน้า

// app/products/[id]/page.tsx
export default function ProductPage({ params }: { params: { id: string } }) {
  return <h1>Product {params.id}</h1>;
}
// → /products/123 → params.id = '123'

พารามิเตอร์แบบมีชนิด

พารามิเตอร์ใน URL จะเป็นสตริงเสมอ โปรดแปลงค่าอย่างชัดเจนเมื่อเป็นรหัสตัวเลข

export default async function PostPage({ params }: { params: { slug: string } }) {
  const post = await getPostBySlug(params.slug);
  if (!post) notFound();
  return <article>{post.content}</article>;
}

เซกเมนต์แบบจับทั้งหมด

ใช้ [...slug] เพื่อจับเซกเมนต์เส้นทางจำนวนเท่าใดก็ได้ ค่าที่ได้จะเป็นอาร์เรย์ของสตริง

// app/docs/[...path]/page.tsx
export default function DocsPage({ params }: { params: { path: string[] } }) {
  // /docs/react/hooks → params.path = ['react', 'hooks']
  return <DocViewer path={params.path} />;
}

เซกเมนต์แบบจับทั้งหมดที่เป็นตัวเลือก

[[...slug]] จะจับเซกเมนต์รูทด้วย — มีประโยชน์สำหรับคำนำหน้าเส้นทางที่เป็นตัวเลือก

// app/[[...lang]]/page.tsx
// Matches /, /en, /en/about, /fr/products/123
export default function Page({ params }: { params: { lang?: string[] } }) {
  const lang = params.lang?.[0] ?? 'en';
  return <div lang={lang}>...</div>;
}

generateStaticParams

ส่งออก generateStaticParams() เพื่อแสดงผลเส้นทางแบบไดนามิกล่วงหน้าในเวลาสร้าง โดยสร้าง HTML แบบสแตติกสำหรับชุดพารามิเตอร์แต่ละชุด

export async function generateStaticParams() {
  const posts = await getPosts();
  return posts.map(p => ({ slug: p.slug }));
}
// → builds /blog/hello-world, /blog/react-tips etc. statically

กลุ่มเส้นทาง — (โฟลเดอร์)

ครอบชื่อโฟลเดอร์ด้วยวงเล็บเพื่อสร้างกลุ่มเส้นทาง กลุ่มนี้ช่วยจัดระเบียบไฟล์โดยไม่เพิ่มเซกเมนต์ใน URL

// File structure:
// app/(marketing)/about/page.tsx → /about
// app/(marketing)/blog/page.tsx  → /blog
// app/(app)/dashboard/page.tsx   → /dashboard
// (marketing) and (app) don't appear in URLs

กลุ่มเส้นทางที่มีโครงสร้างร่วม

แต่ละกลุ่มเส้นทางสามารถมี layout.tsx ของตนเองได้ ทำให้แต่ละส่วนใช้โครงสร้างต่างกันโดยไม่ต้องซ้อนกันใน URL

// app/(marketing)/layout.tsx — marketing shell
// app/(app)/layout.tsx — authenticated app shell
// Both groups share app/layout.tsx as the root

เส้นทางคู่ขนาน — @slot

เติม @ หน้าชื่อโฟลเดอร์เพื่อสร้างช่อง ช่องต่าง ๆ จะแสดงผลพร้อมกันในโครงสร้างแม่ — มีประโยชน์สำหรับหน้าต่างโมดัล การแบ่งหน้าจอ หรือแท็บ

// app/@modal/login/page.tsx
// app/layout.tsx
export default function RootLayout({ children, modal }) {
  return (
    <div>
      {children}
      {modal} {/* renders @modal/login/page.tsx side by side */}
    </div>
  );
}

เส้นทางดักจับ — (..)

ใช้รูปแบบ (..) เพื่อดักจับเส้นทางและแสดงผลแบบแทรกอยู่ในหน้า (เช่น เปิดรูปภาพในหน้าต่างโมดัลแทนการนำทางไปยังหน้าใหม่)

// Soft navigation shows modal:
// app/@modal/(..)/photos/[id]/page.tsx
// Hard navigation shows full page:
// app/photos/[id]/page.tsx

เมทาดาทาของเส้นทางแบบไดนามิก

ส่งออกฟังก์ชันอะซิงโครนัส generateMetadata ในเส้นทางแบบไดนามิกเพื่อกำหนดแท็ก SEO ของแต่ละหน้าโดยอิงจากพารามิเตอร์เส้นทาง

export async function generateMetadata({ params }: { params: { id: string } }) {
  const product = await getProduct(params.id);
  return { title: product.name, description: product.description };
}

ตรวจสอบอย่างรวดเร็ว

การครอบชื่อโฟลเดอร์ด้วยวงเล็บใน App Router ของ Next.js ทำอะไร

สรุป

[id] สร้างเซกเมนต์แบบไดนามิก [...slug] จับเส้นทางย่อยทั้งหมด และ [[...slug]] ทำให้เส้นทางเหล่านั้นเป็นตัวเลือก กลุ่มเส้นทางที่ใช้ (name) ช่วยจัดระเบียบโค้ดโดยไม่ส่งผลต่อ URL และเปิดให้กำหนดโครงสร้างแยกตามกลุ่ม ใช้ generateStaticParams สำหรับการแสดงผลล่วงหน้าในเวลาสร้าง

เริ่มต้นได้ฟรี

เรียนรู้ React ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
88
บทเรียน
324

คำถามที่พบบ่อย

บทเรียน “เส้นทางแบบไดนามิกและกลุ่มเส้นทาง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “เส้นทางแบบไดนามิกและกลุ่มเส้นทาง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “เส้นทางแบบไดนามิกและกลุ่มเส้นทาง”

สร้างเซกเมนต์แบบไดนามิก [slug] กลุ่มเส้นทางด้วย (folder) และเส้นทางแบบขนาน คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “เส้นทางแบบไดนามิกและกลุ่มเส้นทาง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม

ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. รูปแบบการตั้งชื่อไฟล์ของ App Router
  2. คอมโพเนนต์ฝั่งเซิร์ฟเวอร์กับฝั่งไคลเอ็นต์ใน Next.js
  3. เส้นทางแบบไดนามิกและกลุ่มเส้นทาง
  4. Metadata API และ SEO ใน App Router
← กลับไปที่ React Academy