Từ JavaScript đến ứng dụng Next.js hoàn chỉnh

From JavaScript basics to production-ready Next.js, TypeScript and Tailwind CSS

Chỉ với một trang, bạn đi từ let và const đến Server Component, hydration và Tailwind v4, vừa đọc vừa bấm thử.

JavaScript TypeScript Next.js Tailwind CSS Server Client

Cơ bản Basics ●○○ Beginner · Cơ bản

Sáu ý tưởng nền tảng. Nắm chắc chúng, phần còn lại chỉ là ghép chúng lại với nhau.

Biến và kiểu dữ liệu

Variables & Types

Biến là cái hộp có nhãn. Dùng const cho giá trị không gán lại, let khi cần gán lại. Kiểu cơ bản: chuỗi, số, boolean, mảng, object, null, undefined.

Hàm và hàm mũi tên

Functions & Arrow functions

Hàm gói một việc để gọi lại nhiều lần. Dạng ngắn: const add = (a, b) => a + b. Bạn sẽ viết rất nhiều hàm mũi tên trong React.

Kiểu tĩnh

Static Types (TypeScript)

TypeScript là JavaScript cộng thêm kiểu: let age: number. Editor báo lỗi ngay khi bạn gán chuỗi cho biến số, trước khi chạy code.

Component và JSX

Components & JSX

Component là hàm trả về giao diện: function Hello() { return <h1>Xin chào</h1>; }. UI là cây các component lồng nhau.

App Router

File-system routing

Trong Next.js, thư mục là đường dẫn. app/notes/page.tsx thành trang /notes. Không cần cấu hình router thủ công.

Utility-first

Utility classes (Tailwind CSS)

Thay vì viết file CSS riêng, bạn ghép class nhỏ ngay trong JSX: p-4 rounded-xl bg-teal-600. Mỗi class làm đúng một việc.

Mẹo nhớ Memory tips
  • TypeScript = biên tập viên chính tả. Nó gạch chân lỗi trước khi sách được in (trước khi code chạy). TS is a spell-checker for your JS.
  • Next.js = nhà hàng. Bếp (Server) nấu sẵn món, phòng ăn (Client) chỉ lo phần tương tác với khách. Kitchen = server, dining room = client.
  • Tailwind = hộp LEGO. Ghép viên nhỏ có sẵn thay vì đúc khuôn mới cho từng món.
  • Quy tắc vàng: “Server mặc định, Client khi cần”. Server by default, Client by need.

So sánh nhanh Quick comparison

Tiêu chí / CriterionJavaScriptTypeScript
Kiểm tra kiểu / Type checkingKhi chạy (runtime), linh hoạtKhi biên dịch và trong editor
Phát hiện lỗi / Catching bugsThường đến khi người dùng gặp lỗiNhiều lỗi bị chặn từ lúc viết code
Chạy ở đâu / Where it runsTrình duyệt, Node.jsBiên dịch ra JS rồi mới chạy, kiểu bị xoá
Gợi ý code / AutocompleteHạn chếRất tốt vì editor biết cấu trúc dữ liệu
Độ khó học / Learning curveDễ bắt đầuHọc JS trước, thêm kiểu dần dần
Hiểu lầm thường gặp Common misconceptions
  • “TypeScript bảo vệ dữ liệu khi chạy.” Sai: kiểu bị xoá lúc biên dịch, dữ liệu từ API vẫn cần được kiểm tra riêng.
  • “Tailwind chỉ là inline style.” Sai: Tailwind có hover:, md:, chế độ tối và hệ thống design token mà inline style không có.
  • “'use client' nghĩa là không render trên server.” Sai: Client Component vẫn được prerender thành HTML, rồi mới hydrate.
  • “Next.js thay thế React.” Sai: Next.js là framework xây trên React.

Tương tác Hands-on ●○○ Beginner · Cơ bản

Bấm từng file trong dự án DevNotes để xem nó trở thành URL nào, chạy ở đâu, và code ra sao.

Luồng một yêu cầu (request) How one request flows

Bấm Bước tiếp hoặc Tự chạy để đi qua từng giai đoạn. Mặc định đang tạm dừng.

Sơ đồ khái niệm, không theo tỉ lệ thời gian. Conceptual diagram, not to scale.

Sân chơi Tailwind Tailwind playground

Chỉnh các lựa chọn, xem class sinh ra và kết quả thực.

Xin chào Tailwind!

Dự án mẫu: DevNotes Sample project ●○○ Beginner · Cơ bản

Ứng dụng ghi chú nhỏ, làm từng bước. Bạn cần Node.js bản mới (xem yêu cầu phiên bản trên trang tài liệu Next.js, vì con số này thay đổi theo từng bản).

    Trung cấp Intermediate ●●○ Intermediate · Trung cấp

    Server Component và Client Component

    Tiêu chí / CriterionServer ComponentClient Component
    Mặc định? / Default?Có, trong thư mục app/Phải khai báo 'use client' ở đầu file
    Dùng useState, onClickKhôngCó
    async/await lấy dữ liệu trực tiếpCóKhông trực tiếp, thường dùng thư viện hoặc Server Action
    Code gửi xuống trình duyệt / Shipped JSKhôngCó, vào bundle
    Truy cập bí mật (API key, DB)An toànKhông bao giờ đặt ở đây

    Cách làm tốt: giữ 'use client' ở các “lá” nhỏ (nút, form, dropdown), để cây phía trên là Server.

    Máy tính dung lượng bundle Bundle-size calculator

    Giả sử trang của bạn có tổng lượng JS (đã nén gzip). Chuyển bao nhiêu phần sang Server Component thì tiết kiệm được bao nhiêu giây?

    JS gửi xuống: → thời gian tải:

    Công thức: giây = KB × 8 ÷ (Mbps × 1000). Chỉ tính thời gian truyền, chưa tính độ trễ mạng (RTT), giải nén, parse và chạy JS. Tốc độ mạng là số làm tròn tiêu biểu.

    Tailwind responsive: thanh trượt breakpoint Breakpoint slider

    Tailwind mobile-first: class không tiền tố áp dụng cho mọi cỡ, md: áp dụng từ 768px trở lên. Kéo để thử với grid-cols-1 sm:grid-cols-2 lg:grid-cols-4.

    Thang đo đúng tỉ lệ. Giá trị mặc định của Tailwind v4: 40, 48, 64, 80, 96 rem (tương ứng 640 → 1536px).

    TypeScript thiết yếu TS essentials

    Thu hẹp kiểu Narrowing: TS hiểu kiểu sau mỗi lần kiểm tra.

    Generic và utility type: viết một lần, dùng cho nhiều kiểu.

    Ứng dụng thực tế Real-world uses

    Blog, trang tài liệu

    Trang tĩnh, nhanh, tốt cho SEO nhờ HTML dựng sẵn trên server.

    Dashboard

    Server Component lấy dữ liệu, Client Component lo biểu đồ tương tác.

    Cửa hàng online

    Trang sản phẩm tái tạo định kỳ (ISR), giỏ hàng là Client Component.

    Nâng cao Advanced ●●● Advanced · Nâng cao

    Chiến lược render Rendering strategies

    Chiến lượcKhi nào HTML được tạoDữ liệu tươi?Hợp với
    SSG StaticLúc buildCũ cho đến lần build kếBlog, tài liệu
    ISR IncrementalBuild, rồi tái tạo theo chu kỳTươi vừa phảiTrang sản phẩm, tin tức
    SSR DynamicMỗi yêu cầuLuôn mớiTrang cá nhân hoá
    StreamingMỗi yêu cầu, gửi từng phầnLuôn mớiTrang có phần chậm (dùng Suspense)
    CSR ClientTrong trình duyệtLuôn mớiPhần tương tác sau đăng nhập

    Biểu đồ minh hoạ định tính, không theo tỉ lệ. Qualitative illustration, not to scale. Các chiến lược kết hợp (như Partial Prerendering, Cache Components) thay đổi nhanh giữa các bản Next.js, hãy kiểm tra tài liệu bản bạn dùng.

    Streaming với Suspense

    Phần nhanh hiện ngay, phần chậm được stream vào sau.

    
    
    

    Server Action

    Hàm chạy trên server, gọi trực tiếp từ form, không cần tự viết API.

    
    
    Chú ý bảo mật Security Server Action thực chất là endpoint công khai. Luôn kiểm tra quyền và validate dữ liệu đầu vào ở bên trong.

    TypeScript nâng cao Advanced TS

    
    
    

    Tailwind v4: cấu hình trong CSS CSS-first config

    
    
    

    Thang đo Core Web Vitals Scale chart

    Ngưỡng theo hướng dẫn của Google (ở phân vị 75). Mỗi thanh có thang riêng, chỉ so sánh vị trí các ngưỡng trong cùng một thanh. Ngưỡng có thể được cập nhật.

    Dòng thời gian Timeline

    Năm có thể lệch một chút tuỳ nguồn. Phiên bản mới nhất của Next.js, TypeScript, Tailwind thay đổi liên tục, hãy xem trang chính thức.

    Thực hành tốt nhất Best practices

    Câu hỏi còn mở Open questions

    Từ vựng Vocabulary ●●○ Mọi cấp / All levels

    EnglishTiếng ViệtExample sentence

    Mini game Review quiz ●●○ 20 câu / questions

    5 điểm mỗi câu đúng, từ câu đúng thứ 3 liên tiếp được thêm 2 điểm thưởng chuỗi. Điểm tối đa là 136.