React Server Components Là Gì? Hướng Dẫn Cơ Bản Cho Developer

Sơ đồ kiến trúc React Server Components so với Client Components

React Server Components Là Gì?

React Server Components (RSC) là tính năng mới nhất trong React 19, cho phép chia nhỏ giao diện thành hai loại thành phần: Server Components chạy trên máy chủ và Client Components chạy trên trình duyệt. Sự tách biệt này giúp ứng dụng React nhẹ hơn, tải nhanh hơn và tối ưu SEO tốt hơn bao giờ hết.

Khái niệm này được giới thiệu lần đầu qua Next.js App Router và nay đã trở thành một phần cốt lõi trong kiến trúc full-stack React. Thay vì tải toàn bộ JavaScript xuống trình duyệt, Server Components chỉ gửi HTML thuần — giảm đáng kể thời gian tải đầu tiên (Time to Interactive).

Tại Sao Cần React Server Components?

Ứng dụng React truyền thống (CSR) phải tải toàn bộ bundle JavaScript trước khi hiển thị nội dung. Điều này gây ra vấn đề:

  • Thời gian tải chậm: Người dùng phải chờ toàn bộ JS parse và execute trước khi thấy nội dung.
  • SEO kém: Bot của công cụ tìm kiếm không thực thi JavaScript, nên nội dung CSR thường không được index đầy đủ.
  • Bundle lớn: Ứng dụng phức tạp dễ có bundle trên 1MB, ảnh hưởng hiệu suất trên mobile.

Server Components giải quyết tất cả bằng cách render ở server, chỉ gửi HTML đã render sẵn về trình duyệt. Kết hợp với Streaming, người dùng thấy nội dung từng phần thay vì chờ toàn bộ.

Server Components vs Client Components

Tiêu chí Server Component Client Component
Chạy ở đâu Trên máy chủ Trên trình duyệt
Truy cập DOM/Browser API Không được phép Được phép
useState, useEffect Không dùng được Dùng được
Truy cập trực tiếp DB/API Được phép Cần fetch từ client
Kích thước bundle Nhỏ hơn (không gửi JS) Lớn hơn (gửi JS)

So sánh Server Component render flow và Client Component render flow

Cách Sử Dụng Cơ Bản

Đánh Dấu Server vs Client

Mặc định, mọi component trong App Router là Server Component. Để dùng Client Component, thêm directive ở đầu file:

"use client"

Directive này đánh dấu toàn bộ file là Client Component, bao gồm cả các import từ file khác trong cùng file. Điều quan trọng: một Server Component có thể import Client Component, nhưng ngược lại không được.

Ví Dụ Cấu Trúc

  • app/page.tsx — Server Component mặc định, truy cập DB trực tiếp
  • app/components/Counter.tsx — Client Component với "use client", dùng useState
  • app/layout.tsx — Server Component, chỉ layout chung

Server Component có thể fetch dữ liệu từ API hoặc database ngay trong body hàm, không cần useEffect. Điều này đơn giản hóa đáng kể code so với cách truyền thống.

Lợi Ích Chính

1. Nhẹ hơn: Chỉ code ở Client Components mới được gửi JS về trình duyệt. Server Components không ảnh hưởng đến bundle size.

2. SEO tốt hơn: HTML được render đầy đủ ở server, bot tìm kiếm đọc được nội dung ngay.

3. Đơn giản hơn: Không cần dùng useEffect để fetch data trong Server Components — lấy dữ liệu trực tiếp trong component.

4. Streaming: Kết hợp với Suspense, render nội dung từng phần — người dùng thấy loading skeleton ở phần đang tải, phần khác hiển thị ngay.

Lưu Ý Khi Chuyển Đổi

Khi chuyển từ ứng dụng CSR sang RSC, cần chú ý:

  • Hydration mismatch: Đảm bảo HTML server render trùng với JS client render.
  • Cookie và auth: Server Components nhận cookie qua Headers API, không qua document.cookie.
  • Use client boundary: Mỗi "use client" là một boundary — dữ liệu phải serialize qua boundary này, không truyền được hàm hay đối tượng phức tạp.

Nhiều framework như Next.js, React Router (v7), và TanStack Start đều hỗ trợ RSC sẵn. Bạn không cần tự thiết lập server — chỉ cần chọn framework phù hợp.

Kết Luận

React Server Components không chỉ là tính năng mới — nó thay đổi cách suy nghĩ về kiến trúc ứng dụng React. Bằng việc phân tách rõ ràng giữa server và client, developer có thể xây dựng ứng dụng nhanh hơn, nhẹ hơn, và thân thiện với SEO hơn. Nếu bạn đang dùng Next.js App Router, bạn đã sử dụng RSC mỗi ngày. Bây giờ là lúc hiểu sâu hơn để tận dụng tối đa sức mạnh của nó.

Tham khảo: React Docs — Creating a React App · Next.js — React Server Components

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

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

20 Phím Tắt Dòng Lệnh Linux Tăng Năng Suất Cho Lập Trình Viên

20 Phím Tắt Dòng Lệnh Linux Tăng Năng Suất Cho Lập Trình Viên Dòng lệnh Linux (terminal) là công cụ mạnh mẽ nhất trong tay lập trình viên. Không giao…

Xem thêm

Git Hooks: Tự Động Hóa Quy Trình Trong Kho Mã Nguồn

Git Hooks: Tự Động Hóa Quy Trình Trong Kho Mã Nguồn Git hooks là script tự động chạy khi một sự kiện cụ thể xảy ra trong repository Git. Chúng…

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