</>
⌕
Junior #layout#template#loading#error-boundary#app-router

layout, template, loading, error và not-found trong App Router dùng để làm gì?

⚡ Trả lời nhanh

layout giữ state và không remount khi điều hướng giữa các route con; template remount mỗi lần điều hướng. loading.tsx là fallback Suspense bọc page, error.tsx là Error Boundary (phải là Client Component), not-found.tsx hiển thị khi gọi notFound() hoặc không khớp route.

FileVai tròLưu ý
layout.tsxUI chung, giữ state khi đổi route conRoot layout bắt buộc có html và body
template.tsxGiống layout nhưng tạo instance mới mỗi lần điều hướngDùng cho animation vào/ra, reset state, log pageview
loading.tsxFallback tự động bọc page trong SuspenseCho phép streaming và hiển thị UI tức thì
error.tsxError Boundary cho segment conPhải là 'use client', nhận error và reset
not-found.tsxUI 404Kích hoạt bằng notFound()
// app/dashboard/error.tsx
"use client";
export default function Error({ error, reset }: { error: Error; reset: () => void }) {
  return <button onClick={() => reset()}>Thử lại: {error.message}</button>;
}
🃏 Ôn bằng flashcard