Mục lục:
🧩 Kiến thức cần có1️⃣ Giới thiệu React 192️⃣ Các tính năng mới3️⃣ React Compiler4️⃣ Server Components & Server Actions🥇Server Components🥈Server Actions5️⃣ Web Components6️⃣ Asset Loading7️⃣ Document Metadata8️⃣ Cải tiến React Hooks9️⃣ Trải nghiệm ngay React 19 Beta☀️ Tổng kết
🧩 Kiến thức cần có
- Kiến thức về ReactJS.
- Kiến thức về HTML, Javascript.
- Kinh nghiệm làm việc cơ bản với các dự án web xây dựng bằng ReactJS.
1️⃣ Giới thiệu React 19
Ngày 25/04/2024, React 19 phiên bản Beta đã chính thức có mặt trên npm.
React 19 đánh dấu sự thay đổi đáng kinh ngạc cho các lập trình viên React khi mà giờ đây chúng ta sẽ code ít hơn và nhận lại sản phẩm tối ưu hơn.
Cho dù bạn là lập trình viên React dày dạn kinh nghiệm hay chỉ mới tìm hiểu React, việc nắm bắt những tiến bộ này là điều rất cần thiết để có thể theo kịp xu hướng phát triển web hiện đại.
2️⃣ Các tính năng mới
- React Compiler: React đang triển khai một trình biên dịch mới, hứa hẹn sẽ cải thiện hiệu năng web một cách đáng kể. Tại thời điểm mình viết bài thì Instagram đã được tận dụng công nghệ này trên trang web của họ và chắc chắn sẽ đến lượt của chúng ta khi phiên bản ổn định được công bố.
- Actions: Đơn giản hóa việc xử lý dữ liệu và tương tác trong các trang web.
- Server Components: Các component được render từ phía server, giúp cải thiện tốc độ tải trang và cũng hỗ trợ cho việc SEO tốt hơn. Hiện tại chúng ta đã có thể trải nghiệm tính năng này thông qua NextJS.
- Asset Loading: Assets được load dưới background, giúp cho việc chuyển tiếp trang trở nên mượt mà hơn.
- Document Metadata: Bổ sung
<DocumentHead>
component, chúng ta có thể thiết lập thẻ<title>
và các thẻ<meta>
bên trong, cho thấy kể từ React 19 trở đi, chúng ta không cần trăn trở về việc SEO nữa 😎.
- Web Components: Cung cấp khả năng tương thích cao hơn với Web Components,.
- Enhanced Hooks: Lược bỏ cũng như cải tiến một số hooks, giúp code của chúng ta dễ đọc hơn, đồng thời mang lại trải nghiệm tốt hơn khi lập trình 🥳.
3️⃣ React Compiler
Chúng ta có thể nói rằng đây là tính năng quan trọng nhất của bản cập nhật này khi mà nó giúp chuyển đổi React code thành Javascript thuần, tự động “memo” component, giúp tăng hiệu năng đáng kể.
Ở phiên bản React 18 hiện tại, khi một component cha được re-render, các component con cũng sẽ re-render theo, điều này gây một số khó chịu nhất định khi mà chúng ta cứ phải liên tục sử dụng
useMemo()
, useCallback()
, và memo
.Đội ngũ React đã nhận ra việc để lập trình viên tự tối ưu một cách thủ công và lặp đi lặp lại không phải là một ý hay, và thế là họ cho ra đời React Compiler. React Compiler tự động xác định được khi nào nên re-render Component khi state được thay đổi, điều này đồng nghĩa với việc lập trình viên chúng ta không cần dùng đến
useMemo()
, useCallback()
, và memo
nữa.Hiện tại thì instagram.com đang triển khai React Compiler cho sản phẩm của họ, khi dùng React Dev Tools trên trang của họ thì chúng ta có thể thấy được những tag
Memo✨
, đây là thẻ cho biết component đã được tự động ghi nhớ bằng React Compiler.
4️⃣ Server Components & Server Actions
🥇Server Components
Một khái niệm rất quen thuộc với anh em lập trình viên NextJS, kể từ NextJS 13 trở đi, chúng ta đã được giới thiệu về Server Components và đó chính xác là những gì mà React sẽ chính thức mang đến trong phiên bản React 19 này.
Thay vì load một trang trắng tinh lên trình duyệt, sau đó thực thi Javascript để render trang web thì giờ đây, với Server Components, giao diện sẽ được render trước một phần ở phía server, sau đó mới đến lượt một số function Javascript ở phía client.
Việc render từ phía server đem lại một số lợi ích nhất định như:
- SEO: Giúp cho các Search Engine thấy được nhiều nội dung hơn khi crawl dữ liệu, tăng khả năng người dùng tiếp cận trang web của chúng ta.
- Tối ưu hiệu năng: Do được phía server tải trước một phần Javascript và render giao diện, nên hiệu năng và UX được tăng đáng kể. Không còn tình trạng truy cập vào trang web thì thấy trắng tinh sau đó giao diện mới được load dần ra.
- Thực thi code phía server: Việc này giúp chúng ta có thể gọi các yêu cầu API trước khi render và sử dụng dữ liệu từ API đó để render sẵn ngay từ phía server.
🥈Server Actions
Cũng như Server Components, Server Action lần đầu được NextJS giới thiệu ở phiên bản 13, với vai trò là tính năng thử nghiệm.
Sau đó ở phiên bản NextJS 14, tính năng này đã ổn định và được sử dụng rộng rãi.
Ứng dụng thường thấy ở Server Action là để submit những form nhập liệu, gửi yêu cầu trực tiếp đến server luôn, hoặc cũng có thể dùng để fetch data trước ở Server Components.
5️⃣ Web Components
React 19 đơn giản hóa việc tích hợp các Web Components vào code React của bạn. Chức năng này mang lại nhiều khả năng mới để sử dụng React trong nhiều phạm vi mà trước đây rất khó thực hiện.
Hiện tại thì không có thêm thông tin chi tiết về cách tích hợp sẽ trông như thế nào. Tuy nhiên, chúng ta vẫn có thể hy vọng rằng nó sẽ chỉ đơn giản là nhập một Web Components vào React, tương tự như liên kết module. Mình đang rất háo hức chờ đợi thêm thông tin chi tiết về việc triển khai này từ React team.
6️⃣ Asset Loading
Trong React, bạn sẽ cần quản lý cẩn thận về việc load và hiệu suất của ứng dụng, đặc biệt là với hình ảnh và các tệp nội dung khác.
Thông thường, các document elements hiển thị đầu tiên trong trình duyệt, sau đó là CSS, Font và hình ảnh. Điều này có thể dẫn đến hiện tượng giật layout trên trang web vì những thành phần này có thể được load sau khi document được hiển thị trên trình duyệt.
Trong React 19, hình ảnh và các tệp khác sẽ load ở chế độ nền khi người dùng đang xem trang hiện tại. Cải tiến này sẽ giúp cải thiện thời gian tải trang và giảm thời gian chờ đợi.
Ngoài ra, React đang giới thiệu tính năng Suspense trong lifecycle để load nội dung, bao gồm Javascript, CSS và Font. Tính năng này cho phép React xác định thời điểm nội dung sẵn sàng được hiển thị, loại bỏ mọi hiện tượng nhấp nháy trước và sau khi load xong CSS và Font.
Việc tối ưu hóa này không chỉ nâng cao hiệu suất của ứng dụng React mà còn góp phần mang lại trải nghiệm duyệt web thú vị hơn cho người dùng.
7️⃣ Document Metadata
Các thẻ như
<title />
, <meta/>
và <description/>
rất quan trọng trong việc tối ưu hóa SEO. Trong React, việc quản lý các thẻ này trên các route khác nhau có thể hơi rắc rối.Hiện tại, chúng ta thường sử dụng cách viết một đoạn code tùy chỉnh để xử lý các thay đổi về route và cập nhật metadata cho phù hợp. Quá trình này có thể lặp đi lặp lại và dễ xảy ra lỗi, đặc biệt khi xử lý các yếu tố liên quan với SEO như thẻ
<meta/>
.Before:
import React, { useEffect } from 'react'; const HeadDocument = ({ title }) => { useEffect(() => { document.title = title; const metaDescriptionTag = document.querySelector('meta[name="description"]'); if (metaDescriptionTag) { metaDescriptionTag.setAttribute('content', 'New description'); } }, [title]); return null; }; export default HeadDocument;
Trong đoạn code trên, chúng ta có một HeadDocument Component chịu trách nhiệm cập nhật thẻ
<title />
và <meta/>
thông qua props. Đồng thời cập nhật những thông tin này trong hook useEffect
. Nghĩa là về cơ bản, chúng ta dùng JavaScript để cập nhật <title />
và <meta/>
. Thành phần này sẽ được cập nhật khi thay đổi route (sau khi trang được load). Đây không phải là một cách hay vì SEO không thể nào crawl được những thông tin này.After:
const HomePage = () => { return ( <> <title>tiendnm</title> <meta name="description" content="New description" /> // Page content </> ); }
Với React 19, chúng ta có thể sử dụng trực tiếp thẻ
<title />
và <meta/>
như đoạn code phía trên.8️⃣ Cải tiến React Hooks
React Hooks là một trong những tính năng được yêu thích nhất được giới thiệu trong thư viện. Chúng ta có thể đã sử dụng các hook tích hợp của React nhiều lần và có lẽ bạn cũng đã thử tạo các hook tùy chỉnh của riêng mình. Hook phổ biến đến mức chúng trở thành một programming pattern.
Trong React 19, cách chúng ta sử dụng
useMemo
, ForwardRef
, useEffect
và useContext
sẽ thay đổi. Điều này chủ yếu là do một hook mới, use
, sẽ được giới thiệu.Về hook mới
use
:Hook này được React giới thiệu để dùng cho các Promises, async code và Context.
Ví dụ:
import { use } from "react"; const fetchUsers = async () => { const res = await fetch('https://example.com/api/v1/users'); return res.json(); }; const UsersItems = () => { const users = use(fetchUsers()); return ( <ul> {users.map((user) => ( <li key={user.id} className='bg-blue-50 shadow-md p-4 my-6 rounded-lg'> <h2 className='text-xl font-bold'>{user.name}</h2> <p>{user.email}</p> </li> ))} </ul> ); }; export default UsersItems
Hoặc nếu bạn làm việc với React Context, thay vì
useContext(someContext);
Thì bạn chỉ cần dùng
use(someContext);
Rất đơn giản đúng không? 😎
9️⃣ Trải nghiệm ngay React 19 Beta
Chúng ta đã có thể trải nghiệm ngay React 19 Beta thông qua Vite, NextJS,… thông qua hướng dẫn ở document của React, xem tại đây. Lưu ý do các cập nhật này vẫn đang trong quá trình thử nghiệm, chỉ nên cài thử ở những app nhỏ hoặc ở môi trường development, đừng đưa lên production vì có thể xảy ra lỗi không mong muốn.
Dù nói vậy nhưng hiện tại thì mình đã đưa trang web của mình lên React 19 Beta rồi 😂, may mắn là chưa có lỗi nào xảy ra, với lại do trang blog của mình đơn giản nên mình có thể kiểm soát được nếu xảy ra lỗi.
Nếu không setup được hoặc trong quá trình setup bạn gặp khó khăn, đừng ngại để lại comment nhé, mình sẽ hỗ trợ các bạn ngay khi nhận được yêu cầu.
☀️ Tổng kết
Qua bài viết này mình đã tổng hợp sơ bộ những tính năng mới sẽ được cập nhật trong React 19, hy vọng sẽ giúp ích cho các bạn trong quá trình cập nhật thông tin công nghệ.
React 19 hứa hẹn sẽ cho chúng ta trải nghiệm viết code nhanh hơn, cũng như cải thiện đáng kể hiệu năng của trang web.
Bài viết này mình tham khảo, dịch và tổng hợp từ nhiều nguồn, mình sẽ dẫn nguồn tại đây, các bạn có thể truy cập vào bài viết gốc để ủng hộ các tác giả
Nếu có đoạn nào mình dịch sai sót hoặc thiếu thông tin, các bạn hãy cho mình biết sớm để tránh đưa thông tin sai lệch gây ảnh hưởng đến cộng đồng nhé.
Cảm ơn các bạn đã đọc bài tóm tắt của mình. Với vai trò là lập trình viên, chúng ta hãy luôn cập nhật thông tin về công nghệ để hoàn thiện bản thân hơn và bắt kịp những xu hướng mới nhé.