柚子快報邀請碼778899分享:React 19 新特性集合
前言:https://juejin.cn/post/7337207433868197915
新 React 版本信息
伴隨 React v19 Beta 的發(fā)布,React v18.3 也一并發(fā)布。
React v18.3相比最后一個 React v18 的版本 v18.2 ,v18.3 添加了一些警告提示,便于盡早發(fā)現(xiàn)問題,從而在升級 React v19 時更容易。
React 18.3 更新內(nèi)容
React 18.3 相對于 18.2 增加了對廢棄 API 的警告以及其他為 React 19 所需的更改。
React
允許向?this.refs?寫入以支持字符串?ref?的代碼模式轉(zhuǎn)換。在?StrictMode?外部使用已廢棄的?findDOMNode?時,將發(fā)出警告。對使用已廢棄的測試工具方法時發(fā)出警告。在 StrictMode 外部使用已廢棄的遺留 Context 時,將發(fā)出警告。在 StrictMode 外部使用已廢棄的字符串?ref?時,將發(fā)出警告。對函數(shù)組件中使用已廢棄的?defaultProps?發(fā)出警告。當(dāng)在組件或元素中展開?key?時,將發(fā)出警告。從測試工具中使用?act?時,如果方式不當(dāng),將發(fā)出警告。
React DOM對使用已廢棄的?unmountComponentAtNode?方法時發(fā)出警告。對使用已廢棄的?renderToStaticNodeStream?方法時發(fā)出警告。
React v18 發(fā)布后,帶來了以并發(fā)特性為主的各種新 API ( startTransition / useDeferredValue 等 )、新運作模式、及 stream SSR 上的改進等,其相比 React v17 像是一個增量的升級版。
而 React v19 則不然,包含了 大量 細(xì)小的、或破壞性的變更(如document meta data 和asset loading)。
由于 React?v18 canary?已迭代很久,本次更新中的很多內(nèi)容屬于歷史已公布的內(nèi)容,故不會重復(fù)做展開介紹。
React v19 中的新特性 – 概述 以下是 React 19 將具有的新特性的快速概述:
烙 React 編譯器react compiler:React 正在努力實現(xiàn)一個新的編譯器。目前,Instagram 已經(jīng)在利用這項技術(shù),它將在未來版本的 React 中發(fā)布。
? 服務(wù)器組件react server component:經(jīng)過多年的開發(fā),React 引入了服務(wù)器組件的概念。您現(xiàn)在可以在 Next.js 中使用此功能。
? 動作action:動作還將徹底改變我們與 DOM 元素的交互方式。
? 文檔元數(shù)據(jù)document metadata:另一個急需改進的方面即將到來,使開發(fā)人員能夠用更少的代碼實現(xiàn)更多功能。
? 資源加載asset loading:這將使資源能夠在后臺加載,從而改善應(yīng)用程序的加載時間和用戶體驗。
?? Web 組件:這特別令人著迷:React 代碼現(xiàn)在將使我們能夠集成 Web 組件。我對此發(fā)展非常激動,因為它將開啟無數(shù)可能性。
? 增強型鉤子:令人興奮的新鉤子即將問世,將徹底改變我們的編碼體驗。
新的 use() 鉤子useFormStatus() 鉤子useFormState() 鉤子useOptimistic() 鉤子
React 19 將解決 React 長期存在的挑戰(zhàn)之一:過度重新渲染的問題。開發(fā)人員歷來花費了大量時間來解決這個問題,這經(jīng)常導(dǎo)致性能問題。
對導(dǎo)致重新渲染的代碼進行持續(xù)追蹤和優(yōu)化工作一直是工程師們的重復(fù)任務(wù)。但是有了 React 19,這個問題將得到緩解??蚣軐⒆詣犹幚碇匦落秩?,簡化開發(fā)流程。
以前,開發(fā)人員依賴 useMemo()、useCallback()、memo 等技術(shù)來管理重新渲染。但是在 React 19 中,這樣的手動干預(yù)將不再必要。
框架將在幕后智能識別和記憶代碼,從而產(chǎn)生更清晰和更有效的代碼。?
React v20 目前已知內(nèi)容:
React compiler (編譯優(yōu)化器,如 React forget )不等于 React v19 。Activity ( 原 Offscreen )可能在 React v20 推出。
V19新特性介紹
1.?React 編譯器
這是為了性能做的更新。優(yōu)化重新渲染的一種方式是手動使用 useMemo()、useCallback() 和 memo API。根據(jù) React 團隊的說法,這是一種“合理的手動妥協(xié)”。他們的愿景是讓 React 管理這些重新渲染。但是 React 團隊意識到手動優(yōu)化很繁瑣,而社區(qū)的反饋鼓勵他們解決這個問題。因此,React 團隊創(chuàng)建了“React 編譯器”。React 編譯器現(xiàn)在將管理這些重新渲染。React 將自動決定何時以及如何更改狀態(tài)并更新 UI。
React Compiler,在開發(fā)者不調(diào)整任何代碼的情況下,自動優(yōu)化項目性能。幫助我們在不使用 memo/useMemo/useCallback 的情況下,方便的處理好項目 re-render 的問題。你的項目最終只會在需要更新的地方 re-render。React Compiler 編譯之后,你的代碼并不會改變現(xiàn)有渲染機制,而是在已有機制下完成對項目的優(yōu)化。
React Compiler能夠?qū)eact代碼編譯成更為優(yōu)化的JavaScript代碼。這一改變能夠顯著提升React應(yīng)用的運行效率。編譯器的引入不僅優(yōu)化了代碼的執(zhí)行時間,還減少了瀏覽器的負(fù)載,從而使應(yīng)用響應(yīng)更快,交互更流暢。
與依賴追蹤的細(xì)粒度更新不同,React Compiler 通過記憶的方式,讓組件更新只發(fā)生在需要更新的組件,從而減少大量 re-render 的組件。
但是請注意,React Compiler 并非全能,如果你寫的代碼過于靈活,無法被提前預(yù)判執(zhí)行行為,那么 React Compiler 將會跳過這一部分的優(yōu)化。因此好的方式是在項目中引入嚴(yán)格模式,在嚴(yán)格模式的指導(dǎo)下完成的開發(fā),基本都在 React Compiler 的輻射范圍之內(nèi)
例子1:在 React19 之后,不再需要使用 useMemo() 鉤子,因為 React 編譯器將自行進行記憶。
之前:
import React, { useState, useMemo } from 'react';
function ExampleComponent() {
const [inputValue, setInputValue] = useState('');
// 緩存檢查輸入值是否為空的結(jié)果
const isInputEmpty = useMemo(() => {
console.log('檢查輸入是否為空...');
return inputValue.trim() === '';
}, [inputValue]);
return (
type="text"
value={inputValue}
onChange={(e) => setInputValue(e.target.value)}
placeholder="輸入一些內(nèi)容..."
/>
{isInputEmpty ? '輸入為空' : '輸入不為空'}
);
}
export default ExampleComponent;
之后:不需要再使用 useMemo 緩存值了 - React19 將在底層自行處理。
import React, { useState } from 'react';
function ExampleComponent() {
const [inputValue, setInputValue] = useState('');
const isInputEmpty = () => {
console.log('檢查輸入是否為空...');
return inputValue.trim() === '';
});
return (
type="text"
value={inputValue}
onChange={(e) => setInputValue(e.target.value)}
placeholder="輸入一些內(nèi)容..."
/>
{isInputEmpty ? '輸入為空' : '輸入不為空'}
);
}
export default ExampleComponent;
2. 服務(wù)器組件?
React Server Components 是 React 在探索前端邊界的又一次突破性的創(chuàng)舉。它是一種新概念組件。我們可以在構(gòu)建時運行一次組件,以提高頁面的渲染速度。
預(yù)渲染、增量渲染、流式傳輸?shù)雀拍顚μ岣叽笮蛷?fù)雜項目的用戶體驗有非常大的幫助。好消息是,RSC 已經(jīng)在 Next.js 中得到落地實踐。
React 19加強了對服務(wù)端組件(Server Components)的支持,這些組件在服務(wù)器上渲染完成后再發(fā)送到客戶端,極大地提高了頁面加載速度。
這一特性尤其適合內(nèi)容重的網(wǎng)站應(yīng)用,允許部分組件的邏輯在服務(wù)器上執(zhí)行,而不會發(fā)送相關(guān)的JavaScript到客戶端。這樣做的好處包括減少了傳輸數(shù)據(jù)量,加快了首次加載速度,并優(yōu)化了SEO。
舉個例子:
// ServerUserInfo.react.server.js
// 注意:這個文件的擴展名為 .server.js,表示它是一個服務(wù)端組件。
import { db } from './database';
// 從數(shù)據(jù)庫中獲取用戶信息的函數(shù)
async function fetchUserData(userId) {
return db.query('SELECT * FROM users WHERE id = $1', [userId]);
}
function ServerUserInfo({ userId }) {
const userData = fetchUserData(userId);
return (
User Information
Name: {userData.name}
Email: {userData.email}
);
}
export default ServerUserInfo;
這樣我們就創(chuàng)建了一個服務(wù)端組件,它直接從數(shù)據(jù)庫獲取用戶信息,并在服務(wù)器上進行渲染。這樣做還可以保護用戶的敏感信息,因為這些數(shù)據(jù)不會被發(fā)送到客戶端,同時增強了安全性,并且由于減少了客戶端處理邏輯,頁面加載速度更快。
在客戶端中,我們只需要引用這個組件,并在構(gòu)建時配置好相關(guān)的服務(wù)端渲染邏輯。
服務(wù)端組件帶來的額優(yōu)勢:
SEO:服務(wù)器渲染的組件通過向網(wǎng)絡(luò)爬蟲提供更可訪問的內(nèi)容來增強搜索引擎優(yōu)化。性能提升:服務(wù)器組件有助于更快地加載頁面和改善整體性能,特別是對于內(nèi)容密集型應(yīng)用程序。服務(wù)器端執(zhí)行:服務(wù)器組件使在服務(wù)器上執(zhí)行代碼變得無縫和高效,使諸如 API 調(diào)用之類的任務(wù)變得輕松。
目前 Next.js 支持服務(wù)器端組件。React 中所有組件默認(rèn)都是客戶端的。只有當(dāng)你使用 ‘use server’ 時,組件才是服務(wù)器組件 可以在同一項目中的任何 React 組件中導(dǎo)入 requestUsername。在導(dǎo)入服務(wù)器組件后,我們可以使用“Actions”(我們很快會學(xué)習(xí)到)執(zhí)行特定任務(wù)。
'use server';
export default async function requestUsername(formData) {
? const username = formData.get('username');
? if (canRequest(username)) {
? ? // ...
? ? return 'successful';
? }
? return 'failed';
}
3.?動作 action
submitData 是服務(wù)器組件中的動作。form 是一個客戶端組件,它使用 submitData 作為動作。submitData 將在服務(wù)器上執(zhí)行。客戶端(form)和服務(wù)器(submitData)組件之間的通信只有通過動作屬性才能實現(xiàn)。
"use server"
const submitData = async (userData) => {
const newUser = {
username: userData.get('username'),
email: userData.get('email')
}
console.log(newUser)
}
const Form = () => {
return
}
export default Form;
相關(guān)新增的api:
新 API :useActionState 重要性:★
參考信息:useActionState 代碼例子
此 API 原名為 useFormState ,主要用于聯(lián)動原生
表單提交,現(xiàn)代開發(fā)更多使用高級表單庫,故此特性不重要。新 API :useFormStatus 重要性:★
參考信息:useFormStatus 文檔
此 API 與 useFormState 聯(lián)動使用,現(xiàn)代開發(fā)更多使用高級表單庫,故此特性不重要。
新 API :useOptimistic 重要性:★★
參考信息:useOptimistic 文檔
通過此 API 派生其他的 state ,從而在提交動作時,立即樂觀更新此值來優(yōu)化用戶視覺上的交互體驗。
要實現(xiàn)樂觀更新,必然要編寫許多額外邏輯,同時現(xiàn)代請求庫(如 react-query 、SWR 等)早已提供了樂觀更新的功能。然而更多時候,我們沒有精力和工時來提升用戶體驗,過度提升體驗反而會造成更多冗余的樂觀更新邏輯導(dǎo)致后續(xù)維護困難,展示 loading 已經(jīng)足夠,故此 API 不重要,若不是有心為之,則很難用到。
4. Web 組件
Web 組件允許你使用原生 HTML、CSS 和 JavaScript 創(chuàng)建自定義組件,并將它們無縫地整合到你的 Web 應(yīng)用程序中,就像它們是標(biāo)準(zhǔn) HTML 標(biāo)簽一樣。
之前,在 React 中集成 Web 組件并不簡單。通常情況下,要么需要將 Web 組件轉(zhuǎn)換為 React 組件,要么安裝額外的包并編寫額外的代碼,以使 Web 組件與 React 協(xié)同工作。
React 19改進了對Web組件的支持,使得在React項目中整合使用Web標(biāo)準(zhǔn)組件變得更加無縫。這使得開發(fā)者可以利用廣泛的Web組件生態(tài)系統(tǒng),而不必為了在React中使用它們而寫大量的封裝代碼。
import React from 'react';
function CustomButtonComponent() {
return (
<>
>
);
}
export default CustomButtonComponent;
在這個示例中,
可能有的同學(xué)會說,這一個自定義的標(biāo)簽有什么用呢?回答是:非常有用。
因為在React 19的現(xiàn)代Web框架中使用Web組件時,
它實際上是一個Web組件——這是一種使用自定義元素、Shadow DOM、HTML模板封裝好的可重用組件。 當(dāng)你在Web應(yīng)用中使用像
這些自定義元素的行為和外觀完全由你定義的Web組件的JavaScript和CSS控制。以下假設(shè)定義了一個自定義的web組件:
class MyButton extends HTMLElement {
constructor() {
super(); // 調(diào)用父類的constructor
const shadowRoot = this.attachShadow({mode: 'open'});
shadowRoot.innerHTML = `
`;
}
}
// 定義新的自定義元素
customElements.define('my-button', MyButton);
5. 文檔元數(shù)據(jù)?
對元數(shù)據(jù)的管理變得更加簡單。React 19引入了可以直接在React組件中使用HTML元數(shù)據(jù)標(biāo)簽的能力,這樣開發(fā)者就不再需要依賴如react-helmet這樣的庫來動態(tài)更新文檔頭部信息。
1)基本元數(shù)據(jù)標(biāo)簽
考慮到 SSR 的完備性,使用第三方庫插入元信息仍然更好,所以此特性不重要。
之前:
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;
?現(xiàn)在:在 React 中以前是不可能的。唯一的方法是使用像 react-helmet 這樣的包。
function HomePage() {
return (
<>
歡迎來到我的網(wǎng)站
這里有豐富的資源和信息。
>
);
}
在這個示例中,
React 19可以處理這些標(biāo)簽,并將它們正確地渲染到HTML文檔的頭部。這種方式簡化了元數(shù)據(jù)的管理,特別是在單頁面應(yīng)用中,可以更靈活地針對不同頁面設(shè)置SEO相關(guān)的元數(shù)據(jù)。
2)樣式表支持
參考信息:插入 link / meta / script / style / title 文檔說明
對于使用 webpack 等打包工具進行模塊化開發(fā)的現(xiàn)代,除 特別的樣式覆蓋 或 異步分包、構(gòu)建工具缺陷 等原因?qū)е聦樞虺霈F(xiàn) workaround 的需求外,一般我們在業(yè)務(wù)項目內(nèi)不會接觸到手動管理標(biāo)簽的情況,故此特性不重要
在Web開發(fā)中,樣式表的管理至關(guān)重要,無論是通過外部鏈接()還是內(nèi)嵌方式()引入,都需要在 DOM 中精準(zhǔn)布局,以確保樣式優(yōu)先級得到妥善處理。然而,構(gòu)建一個能夠支持組件內(nèi)部樣式表組合的機制往往十分繁瑣,因此開發(fā)者常常面臨權(quán)衡:要么將樣式遠(yuǎn)離其依賴的組件加載,犧牲組織性;要么依賴外部樣式庫,增加額外的復(fù)雜性。
React 19 針對這一挑戰(zhàn)提供了內(nèi)置支持,不僅簡化了樣式表的管理流程,還進一步增強了與客戶端并發(fā)渲染和服務(wù)器端流式渲染的集成能力。通過指定樣式表的優(yōu)先級,React 將自動處理樣式表在DOM中的插入順序,確保在展示依賴于特定樣式規(guī)則的內(nèi)容之前,相關(guān)的樣式表(無論外部還是內(nèi)嵌)已經(jīng)被加載并應(yīng)用。
function ComponentOne() {
return (
{...}
)
}
function ComponentTwo() {
return (
{...}
<-- will be inserted between foo & bar
)
}
在服務(wù)端渲染過程中,React會將樣式表包含在
標(biāo)簽中,以確保瀏覽器在加載完成前不會進行頁面繪制。如果在已經(jīng)開始流式傳輸后才發(fā)現(xiàn)樣式表,React 將確保在客戶端將樣式表插入到標(biāo)簽中,然后再展示依賴于該樣式表的Suspense邊界的內(nèi)容。在客戶端渲染過程中,React會等待新渲染的樣式表加載完成后再提交渲染結(jié)果。如果在應(yīng)用中的多個位置渲染了這個組件,React將確保樣式表在文檔中只被包含一次。
function App() {
return <>
...
>
}
對于那些習(xí)慣于手動加載樣式表的開發(fā)者來說,React 19 的這一改進為他們提供了一個便利的機會?,F(xiàn)在,可以將樣式表直接放在依賴它們的組件旁邊,這不僅有助于提升代碼的可讀性和可維護性,使得開發(fā)者可以更加清晰地了解每個組件的樣式依賴關(guān)系,而且還能夠確保只加載真正需要的樣式表。
此外,樣式庫和與打包器集成的樣式工具也可以采用這一新特性。即使開發(fā)者不直接渲染自己的樣式表,只要他們所使用的工具升級到支持這一功能,他們同樣能夠享受到這一改進帶來的好處。
?3)異步腳本支持
在HTML中,普通腳本(
...
通過利用這些API,開發(fā)者可以優(yōu)化頁面的初始加載速度,減少用戶等待時間。同時,在客戶端更新時,預(yù)取和預(yù)加載資源也能幫助加快導(dǎo)航速度,提升用戶體驗。無論是通過預(yù)加載字體和樣式表來減少頁面渲染阻塞,還是通過預(yù)取DNS和預(yù)連接來加速資源請求,這些API都為開發(fā)者提供了強大的工具,使資源加載更加智能和高效。
分類來看:
preconnect 、prefetchDNS 等 API 將插入 標(biāo)簽的行為命令化,但由于預(yù)加載時機越早越好,等到 React 應(yīng)用運行后,已經(jīng)錯過了 preconnect 的最好時機,所以編寫至 HTML 內(nèi)或 SSR 仍然是首選方案,此類 API 不重要。preinit / preload 等 API 將 腳本、樣式 的加載命令化,但現(xiàn)代項目開發(fā)時已經(jīng)內(nèi)部模塊化,使用 await import() 等懶加載行為已足夠,故除了需要加載外部 腳本、樣式 外,此 API 也不重要。
6)與第三方腳本和擴展的兼容性
在React 19中,對掛載過程進行了優(yōu)化,以更好地兼容第三方腳本和瀏覽器擴展。
在客戶端掛載時,如果渲染的元素與服務(wù)器返回的HTML中的元素不一致,React會觸發(fā)客戶端的重新渲染,以確保內(nèi)容的正確性。然而,過去,若第三方腳本或瀏覽器擴展插入了某些元素,這會導(dǎo)致不匹配錯誤并觸發(fā)不必要的客戶端渲染。
現(xiàn)在,React 19 能夠智能地跳過
和中的意外標(biāo)簽,從而避免了因這些元素引發(fā)的不匹配錯誤。即使因為其他原因需要進行整個文檔的重新渲染,React也會保留由第三方腳本和瀏覽器擴展插入的樣式表,確保頁面的完整性和一致性。7)水合錯誤報告
React 19 在 react-dom 中對水合錯誤的報告進行了優(yōu)化。過去,在開發(fā)模式下遇到水合不匹配時,系統(tǒng)往往只記錄多個錯誤,而缺乏關(guān)于不匹配內(nèi)容的具體信息?,F(xiàn)在,引入了 diff 功能,使得客戶端渲染與服務(wù)端渲染內(nèi)容之間的差異一目了然。這一改進不僅提升了錯誤報告的清晰度,更有助于開發(fā)者迅速定位并修復(fù)水合相關(guān)問題,從而大幅提升開發(fā)效率。
現(xiàn)在只會記錄一條包含不匹配內(nèi)容差異的消息:
8)更好的錯誤報告
為了提供更細(xì)粒度的錯誤處理控制,還新增了兩個根選項來與onRecoverableError相輔相成:
onCaughtError:當(dāng)React在錯誤邊界中成功捕獲到錯誤時,此選項將被調(diào)用。onUncaughtError:當(dāng)錯誤被拋出且未能被任何錯誤邊界捕獲時,此選項將被觸發(fā)。onRecoverableError:當(dāng)錯誤發(fā)生但React能夠自動恢復(fù)時,該選項將起作用。
參考信息:onCaughtError?/?onUncaughtError?/?onRecoverableError?文檔說明
這些新增選項不僅增強了React的錯誤處理能力,還賦予了開發(fā)者在不同錯誤場景下執(zhí)行特定邏輯的能力。無論是進行錯誤日志的記錄、發(fā)送錯誤報告,還是執(zhí)行其他自定義操作,這些選項都能滿足開發(fā)者的需求,幫助他們更有效地管理和應(yīng)對React應(yīng)用中的錯誤情況。
給 React 在全局 ReactDOM.createRoot 掛載時開放了一個全局捕獲錯誤的出口:
ReactDOM.createRoot(document.getElementById('root')!, {
onCaughtError: (error, errorInfo) => {
// ...
},
})
這可以避免在 ErrorBoundary 內(nèi)部收集錯誤,而在全局更清真的統(tǒng)一處理(此處只是單純報告錯誤,涉及到復(fù)雜的 ErrorBoundary 錯誤恢復(fù)和重試,仍然需要編寫大量代碼)。
注:不可以捕獲 React 內(nèi)的異步邏輯錯誤。
React 19 對錯誤處理進行了優(yōu)化,旨在消除錯誤信息的重復(fù),并為處理捕獲和未捕獲的錯誤提供了更多選項。例如,當(dāng)渲染過程中發(fā)生錯誤并被錯誤邊界捕獲時,以前 React 會重復(fù)拋出相同的錯誤(一次是原始錯誤,另一次是在嘗試自動恢復(fù)失敗后),然后調(diào)用console.error輸出錯誤發(fā)生位置的信息。
這種處理方式導(dǎo)致每個被捕獲的錯誤都會被報告三次:
在 React 19 中將記錄單個錯誤,并包含所有錯誤信息:
?
9)useRef 必須傳入默認(rèn)值 重要性:★★★
參考信息:useRef 入?yún)⒏恼f明
React v19 要求 useRef(defaultValue) 傳入一個默認(rèn)值,這會影響到所有歷史 useRef() 未設(shè)定默認(rèn)值的調(diào)用寫法。
在以前,我們往往會通過 useRef
10)React UMD 版本已被刪除 重要性:★★★
參考信息:刪除 UMD
仍有不少項目希望通過 external React UMD 的方式進行一些依賴外置化加載的設(shè)計,但未來 esm 是大勢所趨,故 React v19 已刪除 UMD 版本。
如還想通過外置形式使用 React ,需改為 esm 的
各種不重要的小變化
API 相關(guān)
ReactDOM.render / ReactDOM.hydrate 舊版渲染應(yīng)用 API 已被刪除( 鏈接 ) useDeferredValue 支持設(shè)定默認(rèn)值( 鏈接 )React.createFactory 已被刪除( 鏈接 )react-test-renderer/shallow 導(dǎo)出位置已被更改( 鏈接 )unmountComponentAtNode 舊版卸載節(jié)點 API 已被刪除( 鏈接 )ReactDOM.findDOMNode API 已被刪除( 鏈接 )
特性相關(guān)
更好的 web components 支持( 鏈接 )
注:這是一個較矚目的新特性,但大多數(shù)人很少使用 web component ,故只有特定用戶群體才值得去關(guān)注。
體驗相關(guān)
水合出現(xiàn)差異時,報錯信息更友好( 鏈接 )。優(yōu)化了控制臺錯誤打印的格式( 鏈接 )useLayoutEffect 在服務(wù)端運行的警告已被刪除( 鏈接 )
Class 組件相關(guān)
Class 組件的 propTypes / defaultProps 已被刪除( 鏈接 )Class 組件的 getChildContext 已被刪除( 鏈接 )Class 組件的字符串 ref="string" 已被刪除( 鏈接 )
函數(shù)組件相關(guān)
函數(shù)組件的 render() 渲染方式已被刪除( 鏈接 )
測試相關(guān)
act 函數(shù)導(dǎo)出位置已轉(zhuǎn)移至 react ( 鏈接 )react-test-renderer 已棄用( 非刪除, 鏈接 )
注:此包以前可能用于一些簡單的組件測試,但現(xiàn)在已被棄用,請在所有 React 的測試中統(tǒng)一使用 RTL ( @testing-library/react ),這將是官方推薦的唯一測試庫。
類型相關(guān)
ReactElement 類型被調(diào)整( 鏈接 )限定 React JSX 類型的命名空間( 鏈接 )注:為了避免各種 JSX 的類型在全局沖突,Vue v3.4 也限制了自己的命名空間。useReducer 類型改進( 鏈接 )
新增api參考
柚子快報邀請碼778899分享:React 19 新特性集合
參考鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。