19.0.0 (ngày 5 tháng 12 năm 2024)
Tính năng mới
React
- Actions:
startTransition giờ có thể chấp nhận các hàm bất đồng bộ. Các hàm này được gọi là "Actions", cập nhật trạng thái ở nền và commit UI trong một lần. Actions có thể thực hiện các side effect như yêu cầu bất đồng bộ, và sẽ chờ công việc hoàn tất trước khi Transition kết thúc.
useActionState: Hook mới cho phép sắp xếp Actions trong Transition và truy cập trạng thái. Nhận trạng thái ban đầu và reducer.
useOptimistic: Hook mới để cập nhật trạng thái trong khi Transition đang diễn ra. Khi Transition hoàn tất, trạng thái sẽ được cập nhật thành giá trị mới.
use: API mới để đọc tài nguyên trong lúc render. Chấp nhận Promise hoặc Context; nếu cung cấp Promise, quá trình sẽ bị tạm dừng cho đến khi giá trị được resolve.
- Dùng
ref như một prop: Có thể dùng ref như một prop mà không cần forwardRef.
- Prewarming các sibling của Suspense: Khi component bị tạm dừng, React sẽ ngay lập tức commit phần fallback của ranh giới Suspense gần nhất.
React DOM client
- Prop
action của <form>: Form Actions tự động quản lý form và tích hợp với useFormStatus. Tự động reset form khi thành công.
- Hỗ trợ metadata tài liệu: Có thể render native các thẻ metadata của tài liệu từ component.
- Hỗ trợ stylesheet: Chèn stylesheet vào
<head> của client trước khi hiển thị nội dung của ranh giới Suspense.
- Hỗ trợ script bất đồng bộ: Có thể render script bất đồng bộ ở bất kỳ đâu trong cây component.
React DOM server
- Thêm API
prerender và prerenderToNodeStream: API cho tạo site tĩnh, được thiết kế để hoạt động trong các môi trường streaming như Node.js stream và web stream.
React Server Components
- Tính năng RSC: Directive, server component và server function đã được ổn định. Các thư viện có chứa server component giờ có thể nhắm React 19 làm peer dependency.
Sắp bị loại bỏ
- Truy cập
element.ref: Loại bỏ việc truy cập element.ref, ưu tiên element.props.ref.
react-test-renderer: Trong React 19, react-test-renderer sẽ ghi cảnh báo deprecation và chuyển sang concurrent rendering để dùng trên web.
Thay đổi lớn
React
- Bắt buộc dùng JSX transform mới: Cần JSX transform mới để cải thiện kích thước bundle và cho phép dùng JSX mà không cần import React.
- Lỗi render không bị throw lại: Nếu lỗi không bị Error Boundary bắt, nó sẽ được báo qua
window.reportError.
- Loại bỏ
propTypes: Việc dùng propTypes sẽ bị bỏ qua một cách im lặng. Khuyến nghị chuyển sang TypeScript.
- Loại bỏ
defaultProps của function: Có thể dùng tham số mặc định của ES6 thay thế.
- Loại bỏ string refs: Cần migrate việc dùng string refs sang ref callback.
React DOM
- Loại bỏ
react-dom/test-utils: act được chuyển từ react-dom/test-utils sang react. Các utility khác bị loại bỏ.
- Loại bỏ
ReactDOM.render, ReactDOM.hydrate: Được thay thế bằng ReactDOM.createRoot và ReactDOM.hydrateRoot cho concurrent rendering.
Những thay đổi đáng chú ý
React
- Dùng
<Context> làm provider: Có thể render <Context> làm provider thay cho <Context.Provider>.
- Hỗ trợ custom element: React 19 vượt qua tất cả các bài kiểm tra custom element.
- Thay đổi trong StrictMode:
useMemo và useCallback sẽ tái sử dụng kết quả memoization của lần render đầu tiên.
React DOM
- Diff cho lỗi hydration: Khi xảy ra mismatch, React 19 sẽ ghi một lỗi duy nhất bao gồm phần khác biệt của nội dung không khớp.
Thay đổi về TypeScript
- Cấm implicit return: ref giờ chỉ chấp nhận cleanup function. Implicit return sẽ gây lỗi.
useRef cần đối số khởi tạo: Đối số khởi tạo giờ là bắt buộc.
- Typing
ReactElement nghiêm ngặt hơn: props của React element giờ mặc định là unknown thay vì any.
1 bình luận
Ý kiến trên Hacker News
Có ý kiến cho rằng việc dùng React để xây dựng các ứng dụng có thể mở rộng là khả thi và thú vị
Có quan điểm tích cực về bản phát hành mới của React, nhưng cũng lo ngại rằng người mới bắt đầu có thể thấy khó tiếp cận
Có ý kiến cho rằng độ phức tạp của các framework phía client đang ngày càng tăng
Đánh giá tích cực việc bản phát hành mới bổ sung tính năng
ref as a prop, giúp không còn cầnforwardRefNhắc đến Jotai, một bản clone của Recoil, thay cho Redux và cho biết nó tương thích với React 19
Có ý kiến hy vọng đổi tên API
useĐánh giá tích cực việc trì hoãn phát hành để giải quyết vấn đề suspense song song
Có người thắc mắc liệu có thể xây dựng hook
useActionStatedựa trên các hook tích hợp sẵn hiện có hay khôngĐánh giá tích cực việc bổ sung các tính năng khuyến khích sử dụng công nghệ web tiêu chuẩn và các tính năng cải thiện chất lượng trải nghiệm