หน้าหลัก/บทเรียนขั้นสูง/8. การแยก Route (Routing & Navigation)
เวลาเรียนโดยประมาณ: 45 นาที
Chapter 8: Core Concept - Web Routing & Navigation

การแยก Route (Routing) แผนที่เส้นทางการบิน และท่อเดินเชื่อมห้องอวกาศ!

ยินดีต้อนรับสู่บทเรียนที่ 8! มาร่วมเรียนรู้ศิลปะแห่งการจัดผังโครงสร้างเมืองอวกาศ วิธีการสร้างห้องต่าง ๆ (โฟลเดอร์) เพื่อแยกหน้าเพจออกจากกันอย่างเป็นระบบ และเปรียบเทียบกลไกการเปิดหน้าจอแบบกระพริบดั้งเดิมกับการโหลดอัจฉริยะเสี้ยววินาทีของ Next.js!

Galactic Metro Hologram Station Routing Map Illustration

พจนานุกรมปูพื้นฐานแผนผังนำทาง (Routing Dictionary)

ปูพื้นฐานคำศัพท์ให้แน่นกันก่อน เพื่อความเข้าใจโครงสร้างเบื้องหลังระบบนำทางเว็บไซต์:

1. Route (เส้นทางหน้าเว็บ)

ที่อยู่บน URL บาร์ของบราวเซอร์เพื่อบอกว่าเรากำลังดูหน้าเพจไหนอยู่ เช่น `/lessons/routing` หรือ `/about` (เปรียบเหมือนคอร์เนอร์ห้องอวกาศที่ระบุชื่อเฉพาะเจาะจง)

2. File-based Routing (โฟลเดอร์คือเส้นทาง)

ระบบจัดการของ Next.js ที่ **ใช้ชื่อโฟลเดอร์บนเครื่องคอมพิวเตอร์ของคุณเป็นตัวกำหนด Route ทันที** โดยไม่ต้องมานั่งพิมพ์โค้ดสวิตช์หน้าแผนที่ให้ปวดหัว

3. Single Page Application (SPA - โหลดแบบไม่ขัดจังหวะ)

ระบบเว็บแอปพลิเคชันยุคใหม่ที่เปลี่ยนหน้าจอโชว์เฉพาะโค้ดของชิ้นส่วนใหม่ที่เปลี่ยนไป **โดยที่เว็บเบราว์เซอร์ไม่ต้องกระพริบขาวโหลดใหม่ทั้งระบบ**

4. Pre-fetching (แอบดาวน์โหลดโค้ดล่วงหน้า)

สัญชาตญาณอัจฉริยะของ Next.js ที่แอบดาวน์โหลดชิ้นส่วนสคริปต์ของหน้าปลายทางมารอคอยล่วงหน้าในเครื่องทันทีที่คุณนำหน้าจอไปจ่อหรือชี้ลิงก์ เพื่อความไวระดับพริบตาเดียว

1โครงสร้าง Next.js: สร้างโฟลเดอร์แบบไหน หน้าเว็บจะแยก Route แบบนั้น!

ในอดีตเวลาเขียนโค้ดแยกแต่ละหน้าเพจออกไป เราจำเป็นต้องดาวน์โหลดแพ็คเกจเสริมมาเขียนสวิตช์แผนผังลิงก์ยาวเหยียด ซึ่งดูแลรักษาค่อนข้างยาก แต่สถาปัตยกรรมของ Next.js (App Router) เข้ามาเปลี่ยนเกมนี้ด้วยการประกาศว่า"โครงสร้างโฟลเดอร์ของไฟล์บนเครื่องของคุณ จะถูกจับมาตั้งชื่อเป็น Route บนเว็บบราวเซอร์ทันที!"

โดยมีเงื่อนไขสำคัญอย่างหนึ่งคือ **ภายในโฟลเดอร์นำทางนั้น จะต้องมีไฟล์ชื่อ page.tsx วางอยู่ข้างในเสมอ** เพื่อทำหน้าที่คายโครงสร้าง UI ออกไปแสดงผลบนหน้าจอ:

พิมพ์เขียวโฟลเดอร์ Next.js Directory Tree
src/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) แตกต่างกันราวฟ้ากับเหว:

🔴 แท็ก <a href="..."> (กระพริบเต็มจอ)

เป็นพฤติกรรมดั้งเดิมของเว็บยุคเก่า เมื่อกดสลับหน้า ตัวเบราว์เซอร์จะสั่ง **ทำลายสเตตัสความทรงจำทั้งหมดทิ้ง** ดับหน้าจอไปชั่วขณะ และยิงขอเรียกไฟล์สคริปต์ รูปภาพ CSS ทั้งชุดใหม่ตั้งแต่ต้นจากเซิร์ฟเวอร์

⚠️ ล้าง State ทิ้งหมด + สิ้นเปลืองเน็ต
🟢 แท็ก <Link href="..."> (เนียนกริบลื่นไหล)

เป็นคลาสพิเศษอัจฉริยะของ 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 File Tree)

ใน Next.js **โฟลเดอร์คือเส้นทาง Route** หากเราสร้างไฟล์ `page.tsx` ไว้ในโฟลเดอร์ใด โฟลเดอร์นั้นจะกลายเป็นเส้นทางหน้าเว็บหลักทันที!

src/app/
page.tsx
Route: /
lessons/
api/
page.tsx
Route: .../api
array/
page.tsx
Route: .../array
routing/
page.tsx
Route: .../routing
conditions/
page.tsx
Route: .../conditions
forms/
page.tsx
Route: .../forms
async/
page.tsx
Route: .../async
https://www.dev-d.net/
NAV METHOD SELECTOR:
🏠

app/page.tsx

หน้าแรก: สารบัญหลักสูตรอวกาศ

FILE SIZE:1.2 KB
NEXTJS APP ROUTER ACTIVEREADY
**สเตตัสขณะนี้ (<Link>):** เมื่อคลิกเลือกโฟลเดอร์ Next.js จะดึงเฉพาะสคริปต์ขนาดจิ๋วของไฟล์หน้านั้นเข้ามาเรนเดอร์ในจอทันที **เบราว์เซอร์ไม่ต้องรีโหลดเว็บใหม่ทั้งเว็บ** ปราศจากการกระพริบหน้าจอ สวยงามไร้รอยต่อ!
คอนโซลนำทาง (Nav Logs)
รอการเดินทางส่งข้อมูล...

ประเมินความแม่นยำแผนที่ทางเดิน (Quiz & Exercises)

ทดสอบความเข้าใจเรื่อง Next.js File-based Routing และ Link Navigation เพื่อชิงสะสมแต้มการเดินทางระบบดาวกันเลย!

🌌 แบบทดสอบบทที่ 8 (Routing & Links Quiz)

ข้อ 1 จาก 5

Q:ใน Next.js (App Router) เส้นทางการเข้าเรียน (Route) ของหน้าเว็บถูกกำหนดด้วยกลไกใดเป็นสำคัญ?

💡

มาทบทวนแนวทางการวิเคราะห์ประเด็นนี้กัน...

ถูกต้องที่สุด! Next.js โดดเด่นมากในเรื่อง 'File-based Routing' ช่วยให้นักพัฒนาไม่ต้องมาเขียนไฟล์แผนผังระบุโครงเส้นทางร้อยบรรทัดแบบดั้งเดิม เพียงแค่วางโฟลเดอร์และสวมไฟล์ page.tsx ลงไป ทุกอย่างก็พร้อมสำหรับการนำทางเข้าหน้าเว็บทันที