ทำความรู้จักกับไฟล์พิเศษใน App Router ที่ถูกออกแบบมาเพื่อจัดการ UI States อย่างเป็นระบบ เช่น การรอโหลดข้อมูล (Loading) และการจัดการข้อผิดพลาด (Error Handling)
loading.tsx
สร้าง Instant Loading States ให้กับแอปพลิเคชัน. ทำงานภายใต้ React.Suspense โดยจะแสดง UI นี้ทันทีในขณะที่เนื้อหาของ page.tsx กำลังดึงข้อมูลจาก Server
error.tsx
ดักจับ Runtime Errors ที่เกิดขึ้นใน Route Segment นั้นๆ โดยไม่ทำให้แอปแครชทั้งหน้า.
⚠️ บังคับ: ไฟล์นี้ต้องใช้ "use client" เสมอ เพื่อให้สามารถมีปุ่มลองใหม่ (Retry) ได้
not-found.tsx
แสดง UI เมื่อผู้ใช้เข้าถึง URL ที่ไม่มีอยู่จริง หรือเมื่อคุณเรียกใช้ฟังก์ชัน notFound() จากภายใน Server Component
global-error.tsx
เป็นด่านสุดท้ายในการดักจับ Error. ใช้รับมือกับข้อผิดพลาดที่เกิดขึ้นในระดับสูงสุดคือ app/layout.tsx (ซึ่ง error.tsx ปกติไม่สามารถดักจับได้)
// ต้องสร้าง และ
เองในไฟล์นี้เมื่อเราสร้างไฟล์พิเศษเหล่านี้ในโฟลเดอร์เดียวกัน Next.js จะนำมันมาครอบ (Wrap) ซ้อนกันในระดับ React Components ตามลำดับชั้นที่กำหนดไว้โดยอัตโนมัติ ดังนี้:
สังเกตว่า: Layout จะอยู่ นอกสุด ของ ErrorBoundary เสมอ ซึ่งหมายความว่าถ้าเกิด Error ขึ้นที่ไฟล์ Page, ตัว UI ของ Layout (เช่น Navbar, Sidebar) จะยังคงแสดงผลอยู่ตามปกติและใช้งานได้!
ตัวอย่างการเขียน error.tsx ที่ถูกต้อง โดยต้องกำหนด Directive เป็น Client Component