Next.js là một framework phát triển ứng dụng web front-end dựa trên React, mang đến nhiều tính năng mạnh mẽ giúp tăng tốc độ, hiệu suất và khả năng tối ưu hóa SEO cho các ứng dụng web của bạn.

Next.js là gì?

Next.js là một framework được xây dựng trên nền tảng React của Facebook, giúp tối ưu hóa việc render cả phía server (Server-Side Rendering – SSR) và phía client (Client-Side Rendering – CSR). Được phát triển bởi Vercel, Next.js cho phép các nhà phát triển xây dựng các ứng dụng web hiệu suất cao với các tính năng như render trước (pre-rendering), tĩnh hóa (static generation), và chuyển đổi động (dynamic routing).

Các tính năng nổi bật của Next.js

  • Server-Side Rendering (SSR): Cho phép ứng dụng render trên server trước khi gửi về client, giúp cải thiện tốc độ tải trang và hiệu suất SEO.
  • Static Generation (SG): Tạo ra các trang tĩnh từ dữ liệu động, giúp trang web trở nên nhanh và an toàn hơn.
  • Automatic Code Splitting: Tự động tách các mã nguồn thành các gói nhỏ hơn, giúp giảm thời gian tải trang web.
  • API Routes: Cung cấp khả năng xây dựng các API endpoint trực tiếp trong Next.js mà không cần thiết lập server tách biệt.
  • Dynamic Routing: Cho phép tạo các route động mà không cần cấu hình phức tạp.

Phân biệt SSR và SSG trong Next.js

Khi làm việc với Next.js, các bạn thường nghe nói tới hai khái niệm phổ biến là Server-Side Rendering (SSR) và Static Site Generation (SSG). Vậy điểm khác nhau cơ bản giữa hai loại render này là gì?

Server-Side Rendering (SSR)

SSR là việc render các trang web trên server và gửi kết quả cho client. Điều này giúp cải thiện tốc độ tải trang và làm cho nội dung trang web có thể dễ dàng được các công cụ tìm kiếm index, tối ưu hóa SEO một cách tốt nhất. Trong Next.js, bạn có thể sử dụng hàm getServerSideProps để thực hiện SSR.

    export async function getServerSideProps(context) {
      // Fetch data from external API
      const res = await fetch(`https://.../data`)
      const data = await res.json()
      
      // Return the SSR props
      return { props: { data } }
    }

Static Site Generation (SSG)

SSG cho phép tạo ra các trang web tĩnh ngay tại thời điểm build, đảm bảo trang web có tốc độ tải nhanh và khả năng bảo mật cao. Sử dụng SSG, các bạn sẽ tận dụng được lợi thế của các trang tĩnh với nội dung động mà không cần phải đánh đổi về hiệu suất. Trong Next.js, các bạn có thể sử dụng hàm getStaticProps.


    export async function getStaticProps() {
      // Fetch data from external API
      const res = await fetch(`https://.../data`)
      const data = await res.json()
      
      // Return the static props
      return { props: { data } }
    }
    

Bắt đầu với Next.js

Để bắt đầu một dự án mới với Next.js, các bạn cần cài đặt Node.js và npm (hoặc yarn).

Khởi tạo dự án Next.js

Các bạn có thể khởi tạo một dự án mới bằng cách sử dụng create-next-app command:

npx create-next-app my-next-app

Sau khi khởi tạo xong, các bạn có thể vào thư mục dự án và chạy dự án:


    cd my-next-app
    npm run dev
    

Cấu trúc thư mục trong Next.js

Một dự án Next.js điển hình sẽ có cấu trúc thư mục như sau:

  • /pages: Chứa các file page, mỗi file tương ứng với một route trên ứng dụng.
  • /public: Chứa các file tĩnh như hình ảnh, font, etc.
  • /styles: Chứa các file CSS.

Tạo trang đầu tiên với Next.js

Tạo trang cơ bản

Để tạo một trang mới, các bạn chỉ cần tạo một file mới trong thư mục /pages. Ví dụ, tạo file about.js trong thư mục /pages với nội dung sau:


    export default function About() {
      return (
        About PageThis is the about page.
      )
    }
    

Sau đó, các bạn có thể truy cập trang này tại /about.

Chuyển hướng (Routing) trong Next.js

Next.js sử dụng một mô hình routing tự động dựa trên cấu trúc file. Bất kỳ file nào được tạo trong thư mục /pages sẽ tự động trở thành một route. Ví dụ, với file about.js chúng ta vừa tạo, URL sẽ là /about.

Tạo liên kết giữa các trang

Next.js cung cấp một component Link để tạo liên kết giữa các trang:


    import Link from 'next/link'

    export default function Home() {
      return (
        Home PageGo to About Page
      )
    }
    

Kết hợp API Routes và Frontend

Next.js cho phép các bạn xây dựng các API endpoint trực tiếp trong thư mục /pages/api. Các API route này sẽ được server chạy tự động và các bạn có thể sử dụng chúng để cung cấp dữ liệu cho frontend.

Tạo API Route

Tạo một file mới hello.js trong thư mục /pages/api với nội dung sau:


    export default function handler(req, res) {
      res.status(200).json({ text: 'Hello' })
    }
    

Sau đó, các bạn có thể truy cập API này tại /api/hello.

Sử dụng API Route trong Frontend

Trong một trang frontend, các bạn có thể gọi API này dùng fetch:


    export async function getServerSideProps() {
      const res = await fetch('http://localhost:3000/api/hello')
      const data = await res.json()
      
      return { props: { text: data.text } }
    }

    export default function Home({ text }) {
      return (
        Home Page{text}
      )
    }
    

Kết luận

Next.js là một công cụ mạnh mẽ và dễ dàng sử dụng cho việc phát triển các ứng dụng web hiện đại với tốc độ cao và tối ưu hóa SEO. Từ các tính năng render phía server đến khả năng tạo trang tĩnh, Next.js cung cấp cho các bạn tất cả những gì cần thiết để xây dựng các ứng dụng web tiên tiến. Các bạn nên thường xuyên cập nhật và tìm hiểu các tài liệu mới nhất để tận dụng tối đa sức mạnh của Next.js trong các dự án phát triển web của mình.