Next.js 14: Hướng Dẫn App Router Cho Developer Mới

Next.js 14 là framework React full-stack mạnh mẽ, và App Router là kiến trúc mới nhất giúp xây dựng ứng dụng web với hiệu suất vượt trội. App Router sử dụng React Server Components theo mặc định, giảm JavaScript gửi đến trình duyệt và cải thiện đáng kể thời gian tải trang.

Cấu trúc thư mục Next.js App Router trên IDE hiển thị folder app, page.js, layout.js

App Router Là Gì?

App Router là hệ thống định tuyến (routing) mới nhất của Next.js, hoạt động dựa trên thư mục app/ thay vì thư mục pages/ truyền thống. Mỗi tệp page.js bên trong app/ tạo ra một route có thể truy cập. Ví dụ: app/blog/page.js sẽ tạo ra route /blog trong ứng dụng.

So với Pages Router, App Router mang lại nhiều lợi thế: hỗ trợ Server Components theo mặc định, hệ thống layout mạnh mẽ hơn, và khả năng streaming tích hợp sẵn. Next.js khuyến khích tất cả dự án mới sử dụng App Router.

File-System Routing

Next.js sử dụng định tuyến dựa trên hệ thống tệp. Các thư mục và tệp quyết định cấu trúc URL của ứng dụng:

  • app/page.js → Route gốc /
  • app/blog/page.js → Route /blog
  • app/blog/[slug]/page.js → Route động /blog/:slug
  • app/shop/[...category]/page.js → Route catch-all

Các tệp đặc biệt khác trong App Router:

  • page.js — Định nghĩa UI cho một route (bắt buộc để route có thể truy cập).
  • layout.js — Shared UI giữa các trang, nhận prop children.
  • loading.js — UI hiển thị khi chờ tải (Suspense boundary).
  • error.js — Error boundary xử lý lỗi cho route segment.
  • route.js — Route Handler tạo API endpoint Web.

Các route động sử dụng tên thư mục đặt trong dấu ngoặc vuông [slug] để tạo nhiều trang từ dữ liệu. Xem thêm Layouts and Pages.

Server Components vs Client Components

Loại Mặc định Khi nào dùng
Server Component Mặc định, không cần directive Lấy dữ liệu, bảo mật API key, giảm JS
Client Component Cần 'use client' ở đầu file State, event handler, browser API

Server Components render trên server, giúp cải thiện First Contentful Paint (FCP) và giảm kích thước bundle JavaScript. Khi cần tương tác người dùng (click button, xử lý form), dùng 'use client' directive ở đầu file để chuyển sang Client Component. Dữ liệu truyền từ Server Component xuống Client Component qua props.

Preview Next.js 14 App Router project với UI dashboard

Streaming Và Tối Ưu

App Router hỗ trợ streaming — tải từng phần giao diện dần dần thay vì chờ toàn bộ trang tải xong. Kết hợp loading.js, người dùng thấy UI skeleton ngay khi bắt đầu tải, tạo cảm giác ứng dụng nhanh hơn. Next.js tự động code-splitting và prefetching các link trong <Link> component để tải nhanh hơn khi người dùng điều hướng.

Các tính năng tối ưu khác bao gồm: Route-level code splitting, prefetching, caching tự động, và Incremental Static Regeneration (ISR).

Route Handlers — API Routes

Ngoài định tuyến trang, App Router cung cấp Route Handlers để tạo API endpoint ngay trong ứng dụng. Route Handler sử dụng Web Request/Response APIs tiêu chuẩn, tương thích với các deployment serverless. Ví dụ: app/api/users/route.js tạo ra endpoint /api/users hỗ trợ GET, POST, PUT, DELETE.

Điều này loại bỏ nhu cầu duy trì một server API riêng biệt, đơn giản hóa kiến trúc ứng dụng.

Metadata và SEO

App Router tích hợp sẵn hệ thống metadata. Mỗi page/layout có thể xuất một metadata object hoặc dùng generateMetadata() async để định nghĩa title, description, Open Graph, và Twitter cards. Điều này giúp SEO tự động mà không cần plugin bổ sung.

Bắt Đầu Với App Router

  1. Cài đặt: npx create-next-app@latest --app — flag --app kích hoạt App Router.
  2. Cấu trúc thư mục: Tạo app/layout.js (layout gốc bao bọc toàn bộ app), app/page.js (trang chủ).
  3. Thêm route mới: Tạo thư mục con + page.js cho mỗi trang mới.
  4. Định nghĩa layout: layout.js nhận children và bao bọc nội dung trang bên trong.
  5. Thêm loading state: Tạo loading.js trong thư mục route để hiển thị skeleton loading.
  6. Triển khai: npm run build rồi deploy lên Vercel hoặc bất kỳ server nào hỗ trợ Node.js.

Tài Nguyên Tham Khảo

Tài liệu chính thức: Layouts and Pages, Server và Client Components. Xem khóa học miễn phí của Next.js để nắm kiến thức cơ bản. Đọc routing documentation để hiểu sâu hơn về cấu trúc.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Nginx Reverse Proxy Cho Microservices: Hướng Dẫn Thực Tế

Nginx reverse proxy là lớp trung gian phân phối request đến các microservice, giúp đơn giản hóa bảo mật, load balancing và SSL termination. Đây là thành phần cốt lõi…

Xem thêm

Apache Kafka: Nền Tảng Xử Lý Sự Kiện Phân Tán Thời Gian Thực

Apache Kafka Là Gì? Apache Kafka là nền tảng sự kiện phân tán (distributed event streaming platform), ban đầu được phát triển tại LinkedIn và sau đó trở thành dự…

Xem thêm

GraphQL là gì? Hướng dẫn truy vấn API hiệu quả cho developer

GraphQL là gì? Hướng dẫn truy vấn API hiệu quả cho developer So sánh GraphQL và REST GraphQL là một ngôn ngữ truy vấn API được phát triển bởi Facebook…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất