Hiểu thêm về React Server Components

0 0 0

Người đăng: Vũ Nguyễn

Theo Viblo Asia

Giới thiệu

React Server Components (RSC) là một tính năng mang tính đột phá giúp cải thiện hiệu suất bằng cách giảm lượng JavaScript tải xuống trình duyệt. Khác với các Component truyền thống, RSC chạy hoàn toàn trên server, giúp tối ưu hóa việc lấy dữ liệu và giảm tải cho frontend.

Bài viết này sẽ giúp bạn hiểu rõ về React Server Components, lợi ích của chúng, sự khác biệt so với Client Components truyền thống và cách sử dụng trong Next.js.

React Server Components là gì?

Thông thường, React render component trên trình duyệt bằng JavaScript. Nhưng với RSC, một số component được render trên server và gửi HTML về client, giúp giảm đáng kể kích thước bundle JavaScript.

Cách RSC hoạt động

RSC chạy trên server, thực hiện logic và gửi kết quả đã được serialize về client. Khác với Server-Side Rendering (SSR) gửi nguyên trang HTML đã render, RSC cho phép render từng phần và truyền dần xuống client.

Điều này giúp RSC có thể truy vấn dữ liệu trực tiếp từ database hoặc API mà không cần thêm request từ client, giảm độ trễ và tối ưu hiệu suất.

Lợi ích của RSC

  • Giảm JavaScript tải xuống client: Không gửi JavaScript thừa về trình duyệt, giúp trang tải nhanh hơn.
  • Cải thiện SEO: Nội dung render sẵn trên server giúp công cụ tìm kiếm dễ dàng thu thập dữ liệu.
  • Tối ưu hóa việc lấy dữ liệu: Fetch dữ liệu trực tiếp trên server, không cần gọi API từ client.
  • Tích hợp dễ dàng: Có thể sử dụng cùng với Client Components khi cần.
  • Tăng tốc độ tải trang: Gửi HTML đã render sẵn giúp người dùng thấy nội dung ngay lập tức.
  • Giảm tải bộ nhớ trình duyệt: Trạng thái được xử lý trên server, giúp trình duyệt hoạt động mượt mà hơn.

Sử dụng React Server Components trong Next.js

Next.js 13+ hỗ trợ hoàn toàn RSC. Mặc định, tất cả component trong thư mục app/ của Next.js đều là Server Components, trừ khi bạn chỉ định là Client Component.

Ví dụ: Một Server Component đơn giản

// app/components/PostList.tsx (Mặc định là Server Component)
import { getPosts } from '@/lib/api'; export default async function PostList() { const posts = await getPosts(); return ( <ul> {posts.map((post) => ( <li key={post.id}>{post.title}</li> ))} </ul> );
}

Khi nào cần dùng Client Component?

Một số component vẫn cần chạy trên client, như những component sử dụng useState, useEffect hoặc có event listener. Để chỉ định một component là Client Component, thêm 'use client' ở đầu file:

// app/components/Button.tsx
'use client'; import { useState } from 'react'; export default function Button() { const [count, setCount] = useState(0); return <button onClick={() => setCount(count + 1)}>Click {count}</button>;
}

React Server Components vs. Server-Side Rendering

Nhiều người nhầm lẫn giữa React Server Components (RSC)Server-Side Rendering (SSR). Dưới đây là bảng so sánh:

Đặc điểm React Server Components (RSC) Server-Side Rendering (SSR)
Chạy trên Server Server
Gửi JavaScript xuống client Không
Quản lý state Xử lý trên server Cần hydration trên client
Hỗ trợ SEO
Lấy dữ liệu Fetch trực tiếp trên server Gọi API từ client
Ứng dụng phù hợp Giảm tải JS, tối ưu hiệu suất Render trang động, cập nhật dữ liệu theo thời gian thực

Khi nào nên sử dụng RSC?

React Server Components phù hợp khi bạn muốn giảm JavaScript chạy trên client. Một số trường hợp sử dụng phổ biến:

  • Trang nội dung tĩnh: Blog, tài liệu, trang tin tức.
  • Ứng dụng dashboard: Lấy dữ liệu lớn trên server mà không ảnh hưởng đến frontend.
  • Website thương mại điện tử: Hiển thị danh sách sản phẩm theo thời gian thực mà không gửi nhiều script xuống client.
  • Ứng dụng streaming: Tải dần nội dung để cải thiện trải nghiệm người dùng.

Tránh lỗi Hydration trong RSC

Khi kết hợp RSC với Client Components, cần chú ý tránh lỗi hydration mismatch, tức là nội dung render trên server khác với nội dung hiển thị trên client. Một số nguyên nhân phổ biến:

  • Không sử dụng giá trị thay đổi theo thời gian như Date.now() hoặc Math.random() trong Server Components.
  • Không render JSX không hợp lệ, chẳng hạn như <div> nằm trong <p>.
  • Không sử dụng các API chỉ chạy trên client, ví dụ window, document, localStorage trong Server Components.
  • Khi cần interactivity, hãy tách component đó thành Client Component bằng cách thêm 'use client'.

Kết luận

React Server Components giúp tăng hiệu suất bằng cách giảm tải JavaScript cho client. Khi kết hợp với Next.js, RSC giúp tối ưu trải nghiệm người dùng bằng cách cải thiện tốc độ tải trang và giảm tải cho trình duyệt. Hiểu rõ cách sử dụng RSC sẽ giúp ta xây dựng ứng dụng React nhanh hơn, nhẹ hơn và dễ bảo trì hơn.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cùng tìm hiểu về các hook trong React hooks

Đối với ai đã từng làm việc với React thì chắc hẳn đã có những lúc cảm thấy bối rối không biết nên dùng stateless (functional) component hay là stateful component. Nếu có dùng stateful component thì cũng sẽ phải loay hoay với đống LifeCycle 1 cách khổ sở Rất may là những nhà phát triển React đã kịp

0 0 108

- vừa được xem lúc

Khi nào nên (và không nên) sử dụng Redux

. Công việc quản lý state với những hệ thống lớn và phức tạp là một điều khá khó khăn cho đến khi Redux xuất hiện. Lấy cảm hứng từ design pattern Flux, Redux được thiết kế để quản lý state trong các project JavaScript.

0 0 131

- vừa được xem lúc

ReactJS: Props và State

Nếu bạn đã học ReactJS hay React Native, bạn sẽ thấy các Props và State được sử dụng rất nhiều. Vậy chính xác chúng là gì? Làm thế nào để chúng ta sử dụng chúng đúng mục đích đây.

0 0 66

- vừa được xem lúc

State và Props trong Reactjs

Hello các bạn, tiếp tục seri tìm hiểu về ReactJs hôm nay mình xin giới thiệu đến các bạn hai thứ mình cho là thú vị nhất của ReactJs là State và Props. State bạn có thể hiểu đơn giản là một nơi mà bạn lưu trữ dữ liệu của Component, từ đó bạn có thể luân chuyển dữ liệu đến các thành phần trong Compon

0 0 62

- vừa được xem lúc

Memoization trong React

. 1.Introduction. Memoization có liên quan mật thiết đến bộ nhớ đệm, và dưới đây là một ví dụ đơn giản:. const cache = {}.

0 0 63

- vừa được xem lúc

Nâng cao hiệu suất React Hooks với React.memo, Memoization và Callback Functions

1.Ngăn Re-render và React.memo. React.

0 0 81