พจนานุกรมปูพื้นฐานแผนผังนำทาง (Routing Dictionary)
ปูพื้นฐานคำศัพท์ให้แน่นกันก่อน เพื่อความเข้าใจโครงสร้างเบื้องหลังระบบนำทางเว็บไซต์:
ที่อยู่บน URL บาร์ของบราวเซอร์เพื่อบอกว่าเรากำลังดูหน้าเพจไหนอยู่ เช่น `/lessons/routing` หรือ `/about` (เปรียบเหมือนคอร์เนอร์ห้องอวกาศที่ระบุชื่อเฉพาะเจาะจง)
ระบบจัดการของ Next.js ที่ **ใช้ชื่อโฟลเดอร์บนเครื่องคอมพิวเตอร์ของคุณเป็นตัวกำหนด Route ทันที** โดยไม่ต้องมานั่งพิมพ์โค้ดสวิตช์หน้าแผนที่ให้ปวดหัว
ระบบเว็บแอปพลิเคชันยุคใหม่ที่เปลี่ยนหน้าจอโชว์เฉพาะโค้ดของชิ้นส่วนใหม่ที่เปลี่ยนไป **โดยที่เว็บเบราว์เซอร์ไม่ต้องกระพริบขาวโหลดใหม่ทั้งระบบ**
สัญชาตญาณอัจฉริยะของ Next.js ที่แอบดาวน์โหลดชิ้นส่วนสคริปต์ของหน้าปลายทางมารอคอยล่วงหน้าในเครื่องทันทีที่คุณนำหน้าจอไปจ่อหรือชี้ลิงก์ เพื่อความไวระดับพริบตาเดียว
1โครงสร้าง Next.js: สร้างโฟลเดอร์แบบไหน หน้าเว็บจะแยก Route แบบนั้น!
ในอดีตเวลาเขียนโค้ดแยกแต่ละหน้าเพจออกไป เราจำเป็นต้องดาวน์โหลดแพ็คเกจเสริมมาเขียนสวิตช์แผนผังลิงก์ยาวเหยียด ซึ่งดูแลรักษาค่อนข้างยาก แต่สถาปัตยกรรมของ Next.js (App Router) เข้ามาเปลี่ยนเกมนี้ด้วยการประกาศว่า"โครงสร้างโฟลเดอร์ของไฟล์บนเครื่องของคุณ จะถูกจับมาตั้งชื่อเป็น Route บนเว็บบราวเซอร์ทันที!"
โดยมีเงื่อนไขสำคัญอย่างหนึ่งคือ **ภายในโฟลเดอร์นำทางนั้น จะต้องมีไฟล์ชื่อ page.tsx วางอยู่ข้างในเสมอ** เพื่อทำหน้าที่คายโครงสร้าง UI ออกไปแสดงผลบนหน้าจอ:
พิมพ์เขียวโฟลเดอร์ Next.js Directory Treesrc/app/ ├── page.tsx <-- วิ่งเข้าหน้าแรกสุดที่ (Route: /) ├── lessons/ │ ├── api/ │ │ └── page.tsx <-- วิ่งเข้าหน้ารายการ (Route: /lessons/api) │ ├── array/ │ │ └── page.tsx <-- วิ่งเข้าหน้ารายการ (Route: /lessons/array) │ └── routing/ │ └── page.tsx <-- โค้ดของหน้านี้ปัจจุบัน! (Route: /lessons/routing)
2เปรียบเทียบสงครามนำทาง: a href (ทุบตึกสร้างใหม่) VS Link (เปลี่ยนวอลเปเปอร์เฉพาะจุด)
การเดินทางสลับเปลี่ยนหน้าจอในโลกของเว็บ มีคำสั่งคอยนำทางอยู่ 2 ชนิดหลัก ๆ ซึ่งให้ประสบการณ์ผู้ใช้ (UX) แตกต่างกันราวฟ้ากับเหว:
เป็นพฤติกรรมดั้งเดิมของเว็บยุคเก่า เมื่อกดสลับหน้า ตัวเบราว์เซอร์จะสั่ง **ทำลายสเตตัสความทรงจำทั้งหมดทิ้ง** ดับหน้าจอไปชั่วขณะ และยิงขอเรียกไฟล์สคริปต์ รูปภาพ CSS ทั้งชุดใหม่ตั้งแต่ต้นจากเซิร์ฟเวอร์
⚠️ ล้าง State ทิ้งหมด + สิ้นเปลืองเน็ตเป็นคลาสพิเศษอัจฉริยะของ Next.js ที่จะเข้าสกัดการกระพริบของบราวเซอร์ และสลับดึงเฉพาะสคริปต์ขนาดจิ๋วของหน้าเพจใหม่มาเรนเดอร์ลงในพื้นที่ โดยรักษาความจำ State หลังบ้านและหน้าต่างนำทางอื่นไว้สมบูรณ์แบบ
✨ โหลดเสี้ยววินาที (SPA) + แอบดึงโค้ดล่วงหน้า3Dynamic Routes: วิธีส่งตัวแปรข้ามกาแล็กซีผ่านวงเล็บเหลี่ยม [id]
บางครั้งเราไม่สามารถสร้างโฟลเดอร์แยกเดี่ยว ๆ รองรับทุกตัวเลขข้อมูลได้ เช่น หากเรามีบทเรียนย่อยนับพันเรื่อง หรือมีบัญชีนักบินจำนวนมาก การตั้งชื่อโฟลเดอร์ตายตัวแบบ /lessons/api, /lessons/array ย่อมไม่สะดวกสบาย Next.js จึงคิดลอจิกสุดเทพที่เรียกว่า Dynamic Routes
โดยการ **ตั้งชื่อโฟลเดอร์ล้อมรอบด้วยวงเล็บเหลี่ยม เช่น [id] หรือ [slug]** เพื่อบอกว่าตรงจุดนี้คือตัวแปรยืดหยุ่นนะ ค่าที่ส่งผ่าน URL บาร์จะถูกมัดรวมส่งเข้าไปในโค้ดให้อัตโนมัติ:
การตั้งชื่อและอ่านค่า Dynamic URL// 1. สร้างโฟลเดอร์ในโปรเจกต์ชื่อ: src/app/pilot/[id]/page.tsx // 2. หากผู้ใช้พิมพ์พิมพ์นำทางมาที่: https://zoon.space/pilot/captain-mika // 3. ในไฟล์ page.tsx เราสามารถแกะคีย์ [id] มาใช้งานได้ทันทีดังนี้: export default async function PilotPage({ params }) { // ดึงคำว่า "captain-mika" จากวงเล็บเหลี่ยม params const pilotId = (await params).id; return ( <div> <h1>ยินดีต้อนรับนักบินประจำการ: {pilotId}</h1> </div> ); }
แท่นทดสอบผังเมืองจำลอง (File-based Directory Simulator)
มิกะลองปรับเลือกโหมดระหว่าง **<Link>** กับ **<a> (Anchor)** จากนั้นลองคลิกเลือกสวิตช์โฟลเดอร์ไฟล์ `page.tsx` ต่าง ๆ บนบอร์ดต้นไม้ด้านซ้าย เพื่อสัมผัสความกระพริบค้างเปรียบเทียบกับความเนียนกริบของ Next.js และสังเกต Log การเชื่อมต่อสด ๆ ได้ทันทีครับ!
เครื่องฉายการจัดโฟลเดอร์และการนำทางจำลอง (File-based Router Deck)
สลับโหมดกดนำทางเพื่อเปรียบเทียบการรีโหลดแบบดั้งเดิมกับการโหลดอัจฉริยะแบบ Next.js Link
ใน Next.js **โฟลเดอร์คือเส้นทาง Route** หากเราสร้างไฟล์ `page.tsx` ไว้ในโฟลเดอร์ใด โฟลเดอร์นั้นจะกลายเป็นเส้นทางหน้าเว็บหลักทันที!
app/page.tsx
หน้าแรก: สารบัญหลักสูตรอวกาศ
