เส้นทางแบบไดนามิกและกลุ่มเส้นทาง
สร้างเซกเมนต์แบบไดนามิก [slug] กลุ่มเส้นทางด้วย (folder) และเส้นทางแบบขนาน
เส้นทางแบบไดนามิกและกลุ่มเส้นทาง เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- รูปแบบการตั้งชื่อไฟล์ของ App Router
- คอมโพเนนต์ฝั่งเซิร์ฟเวอร์กับฝั่งไคลเอ็นต์ใน Next.js
- เส้นทางแบบไดนามิกและกลุ่มเส้นทาง
- Metadata API และ SEO ใน App Router