Next.js là gì? Hãy hình dung như thế này
Khi bạn truy cập một trang web, trình duyệt cần nhận về mã HTML, CSS và JavaScript để hiển thị giao diện. Câu hỏi là: ai tạo ra những file đó, và tạo ra ở đâu? Đây là vấn đề mà Next.js giải quyết một cách thông minh:- Tự tạo URL theo thư mục — thêm một thư mục là có ngay một trang mới, không cần cấu hình
- Tạo sẵn giao diện trên server — trang tải nhanh hơn, không phải chờ máy người dùng tự dựng từ đầu
- Hiển thị dần từng phần — phần nào xong trước hiện trước, không bắt người dùng nhìn màn hình trắng chờ tất cả
- Tự cân bằng giữa tốc độ và độ mới của dữ liệu — phần ít đổi thì ưu tiên tải nhanh, phần cần luôn mới thì tự cập nhật
- Viết được cả phần xử lý dữ liệu (backend) ngay trong cùng dự án — không cần dựng thêm một server riêng
Tại sao không dùng HTML thuần túy?
Bạn hoàn toàn có thể viết một trang web bằng HTML thuần. Nhưng khi ứng dụng phức tạp hơn:Các khái niệm cốt lõi
App Router — Mỗi thư mục = Một URL
App Router là cách Next.js 16 tổ chức trang: mỗi trang giao diện tương ứng với một URL, được tạo ra từ cấu trúc thư mục trong thư mụcapp/. Ví dụ:
Components — Khối xây dựng giao diện
Component là mảnh ghép giao diện có thể tái sử dụng. Giống như các khối LEGO — bạn tạo ra một lần, ghép lại theo nhiều cách khác nhau. Ví dụ trong ứng dụng quản lý công việc:TaskCard, bạn chỉ sửa ở một chỗ duy nhất — tất cả task card trong toàn bộ ứng dụng đều cập nhật theo.
Server vs Client Components
Đây là khái niệm quan trọng nhất trong Next.js hiện đại.Server Components
- Tạo HTML trước khi gửi về trình duyệt
- Truy cập database, API keys an toàn
- Tải trang nhanh hơn, SEO tốt hơn
- Không xử lý được tương tác người dùng
Client Components
- Xử lý click, nhập liệu, hover
- Cập nhật giao diện realtime
- Kết nối Firebase Realtime
- Cần khi có tương tác người dùng
Layout — Khung chung cho nhiều trang
Layout là phần giao diện xuất hiện trên nhiều trang mà không cần viết lại — ví dụ header, sidebar, footer. Ví dụ thực tế:Trạng thái tải & lỗi — không bao giờ để màn hình trắng
Next.js có sẵn cơ chế để mỗi trang tự hiện “đang tải…” trong lúc chờ dữ liệu, và tự hiện thông báo lỗi thân thiện thay vì màn hình trắng hoặc app bị đứng khi có sự cố. Về mặt kỹ thuật, đây là hai file quy ước của Next.js:loading.tsx (màn hình chờ) và error.tsx (màn hình lỗi), đặt cạnh mỗi trang.
Ví dụ thực tế:
SEO, ảnh & font tự tối ưu
Next.js tự lo ba việc mà nếu tự viết HTML thuần, bạn (hoặc Claude Code) sẽ phải làm thủ công rất nhiều — mỗi việc gắn với một tính năng có tên riêng trong Next.js:API Routes — Backend nhẹ trong cùng dự án
Next.js cho phép bạn viết backend API ngay trong cùng dự án, không cần server riêng. Phù hợp cho những tác vụ cần bảo mật hoặc tích hợp dịch vụ bên thứ 3. Khi nào dùng API Routes thay vì Firebase trực tiếp?Server Actions — nút bấm nói chuyện thẳng với server
Bên cạnh API Route, Next.js có một cách khác để xử lý form và nút bấm: Server Action (đánh dấu bằng'use server' trong code) — một đoạn xử lý chạy trên server, gắn thẳng vào nút “Lưu” hay “Gửi” mà không cần dựng riêng một API endpoint.
Ví dụ thực tế: Khi bạn bấm nút “Thêm task” trên form, dữ liệu (tiêu đề, người phụ trách…) được gửi thẳng lên server để lưu vào Firestore — Claude Code có thể chọn viết theo kiểu Server Action thay vì API Route, kết quả với bạn là như nhau: bấm nút, dữ liệu được lưu, danh sách tự cập nhật.
Cách Next.js 16 tạo ra nội dung trang
Next.js 16 thay đổi hoàn toàn cách nghĩ về việc “trang này nên nhanh hay nên mới nhất”: thay vì chọn một chế độ cố định cho cả trang, từng phần nhỏ trong cùng một trang có thể tự quyết định là tĩnh (nhanh) hay động (luôn mới), nhờ tính năng gọi là Cache Components.Mặc định: render động (Dynamic by default)
Mặc định: render động (Dynamic by default)
- Trang cần dữ liệu cá nhân hóa (dashboard, profile riêng từng người)
- Trang cần dữ liệu luôn mới nhất, không được phép cũ (giỏ hàng, số dư tài khoản)
Lưu tĩnh (Static) — đánh dấu bằng 'use cache'
Lưu tĩnh (Static) — đánh dấu bằng 'use cache'
use cache). Next.js tạo sẵn kết quả một lần, tái sử dụng cho mọi người truy cập sau — cực nhanh, không phải chờ server xử lý lại.Phù hợp với:- Trang nội dung ít thay đổi (blog, landing page, docs)
- Trang cần tốc độ tải tối đa, không cần cá nhân hóa
Làm mới định kỳ (Incremental) — 'use cache' + thời gian sống
Làm mới định kỳ (Incremental) — 'use cache' + thời gian sống
- Trang cần nhanh nhưng cần cập nhật định kỳ
- Catalog sản phẩm (cập nhật mỗi 5 phút)
- Bảng xếp hạng, thống kê
Trộn tĩnh và động trong cùng 1 trang (Partial Prerendering)
Trộn tĩnh và động trong cùng 1 trang (Partial Prerendering)
- Trang có cả nội dung chung (menu, layout) lẫn nội dung riêng từng người (thông báo, giỏ hàng)
Người gác cổng — kiểm tra trước khi vào trang
Nhiều app cần chặn một số trang lại: chưa đăng nhập thì không được vào/dashboard, ví dụ vậy. Next.js có một lớp kiểm tra chạy trước khi trang được mở ra, đặt trong một file tên proxy.ts (tên cũ trước Next.js 16 là middleware.ts) — giống như một người gác cổng đứng trước cửa, kiểm tra vé trước khi cho vào rạp.
Ví dụ thực tế: Bạn gõ yourapp.com/dashboard nhưng chưa đăng nhập → người gác cổng (proxy.ts) phát hiện, tự động đưa bạn về trang /login thay vì cho vào thẳng dashboard.
proxy.ts — chỉ cần mô tả đúng quy tắc: trang nào cần đăng nhập, trang nào công khai.Next.js + Claude Code = Xây app siêu nhanh
Cách mô tả yêu cầu hiệu quả
Claude Code hiểu yêu cầu bằng tiếng Việt thông thường. Bạn không cần biết khái niệm kỹ thuật — chỉ cần mô tả kết quả bạn muốn thấy. ❌ Mô tả mơ hồ:Quy trình làm việc điển hình
Khởi tạo dự án
Xây dựng layout và navigation
Xây dựng từng trang
Thêm tính năng tương tác
Kiến trúc tổng thể Next.js
Điểm quan trọng:- Người gác cổng kiểm tra quyền truy cập trước khi trang render — chặn người chưa đăng nhập khỏi khu vực riêng tư
- Server Components giao tiếp với Firebase ở phía server — bảo mật, không lộ API key
- Client Components dùng Firebase SDK trực tiếp — nhận cập nhật realtime
- API Routes xử lý các tác vụ cần giữ bí mật (gọi dịch vụ bên thứ 3)
So sánh Next.js với các lựa chọn khác
Bắt đầu với Next.js — Chỉ 3 bước
Yêu cầu Claude Code khởi tạo
Cung cấp Firebase config
Mô tả tính năng và để Claude Code xây
Câu hỏi thường gặp
Next.js khác React như thế nào?
Next.js khác React như thế nào?
TypeScript là gì? Tôi có cần học không?
TypeScript là gì? Tôi có cần học không?
Tôi có cần hiểu React để dùng Next.js không?
Tôi có cần hiểu React để dùng Next.js không?
Bấm nút Lưu thì dữ liệu đi đâu, xử lý như thế nào?
Bấm nút Lưu thì dữ liệu đi đâu, xử lý như thế nào?
Ứng dụng Next.js có chạy offline không?
Ứng dụng Next.js có chạy offline không?
- Firebase Firestore có offline mode — dữ liệu được cache và đồng bộ lại khi có mạng
- Có thể thêm PWA (Progressive Web App) để ứng dụng hoạt động offline và cài được như app trên điện thoại
Next.js có phù hợp cho ứng dụng mobile không?
Next.js có phù hợp cho ứng dụng mobile không?
Làm thế nào để chia sẻ ứng dụng cho người khác dùng?
Làm thế nào để chia sẻ ứng dụng cho người khác dùng?
my-task-app.vercel.app. Chia sẻ URL này là xong — người dùng không cần cài đặt gì.Nếu muốn domain riêng (ví dụ app.congty.com), cần mua domain (~$10-15/năm) và kết nối với Vercel trong vài bước cấu hình đơn giản.Tóm tắt
App Router
Server & Client Components
API Routes & Server Actions
Vercel Deploy
Điểm mấu chốt: Next.js là khung xương của ứng dụng web — nó lo phần định tuyến, render, và tích hợp với các dịch vụ khác. Kết hợp với Firebase (backend) và Vercel (deploy), bạn có một stack hoàn chỉnh để xây dựng bất kỳ ứng dụng web nào — chỉ cần mô tả yêu cầu cho Claude Code.