燈光變暗了——或許只是深色模式——在無數個打開的標籤頁中,我,React 19.2,深吸了一口氣。
我是千禧世代的框架開發者:經驗豐富,咖啡因攝取過量,暗自懷疑工作與生活平衡是否真的存在,至今仍對休年假感到內疚。貼紙依然暢銷,但批評者呢?他們多年來一直在竊竊私語,說什麼「副作用」和「記憶疲勞」。
但我回來了——更大膽、更睿智,而且我敢說,還帶了點兒活力。
我已經不再拍攝我的餐點照片,用抹茶代替了紅牛,並且終於學會了使用 useEffect 來設定界限。
我的新名字? React 19.2。我終於迎來了我的 sigma 時代。
沒錯,我的新 React 編譯器(帶 Babel 插件)可能會讓 Vite 建置多花幾秒鐘,但這與你以前花費數小時手動緩存所有內容相比,簡直微不足道,不是嗎?我的編譯器現在可以自動處理最佳化——說實話,我對這次升級非常滿意。
我的蛻變新進展:
<Activity /> = "它賦予背景角色活力。" 🎭好吧,實話實說——我以前和我的元件之間存在著一種有害的拉鋸關係。
安裝。解除安裝.再次安裝。
它散發著分分合合的情侶氣息。
前一秒你的<Sidebar />還在,下一秒呢?就沒了。被刪除了。狀態徹底消失了。然後我們再聯絡上,我得從頭開始重建一切,就好像什麼事都沒發生過一樣。真是累死了。對我們倆來說都是如此。
但我成長了。透過<Activity /> ,我明白了並非每次休息都必須是分手。
<Activity mode={isShowingSidebar ? "visible" : "hidden"}>
<Sidebar />
</Activity>
React 會在後台以低優先級渲染<Sidebar />元素——就像 NPC 等著你再次經過一樣。狀態保持不變,DOM 也保留了下來,只是不在螢幕上。它並沒有被卸載,只是被隱藏了。
它表示「我們暫時分開,但你仍然可以使用我的 Netflix 登入資訊」。
情感表達非常豐富 😉
我的 useEffects -> 每一個小小的屬性改動?每一次回呼函數的調整?砰!依賴關係出問題了。我會把所有人都拉進我的業務裡,就像在說:“如果我重新渲染,我們所有人都要重新渲染。”
但後來我遇到了 useEventEffect。
冷靜、超脫、情緒穩定——基本上就是那種看到你一團糟就眨眨眼說「太瘋狂了,哈哈」的 Z 世代朋友。
const onConnected = useEventEffect(() => {
sendMessage("hey");
});
我的新朋友 useEventEffect 讓我明白,並非每次更新都與我有關。
有時候,最健康的生活方式…就是放鬆一下…🧘♀️
好吧,說實話cacheSignal()還不錯。
簡而言之,它會提供一個與伺服器元件快取取得操作關聯的 AbortSignal。因此,如果 React 在渲染過程中決定不再需要這些快取資料,該訊號就會中止,你的獲取操作也會提前終止。
說實話:我把它加到清單裡是因為它是新功能,而不是因為你會經常使用它。這就好比你星期日準備好飯菜,結果週三還是點了外賣。
它有用嗎?當然,在某些極端情況下,例如具有複雜串流 SSR 的高流量應用程式。
你會用它嗎?可能不會。這也沒關係。我的孩子也不是個個都一樣優秀。 😉
以前除錯 React 性能就像試圖弄清楚你的戀人為什麼突然消失一樣。是我的問題嗎?我是不是渲染次數太多了?還是我太黏人了?
你會像看 Instagram 快拍一樣盯著火焰圖,琢磨著 47 毫秒是不是“很多”,或者你是不是有點小題大做了。
但現在呢?我得拿出證據了。
開啟 Chrome 開發者工具 → 效能選項卡,我這就給你示範一下。
⚛️ 調度器軌道:
阻塞音軌:「沒錯,我凍結了你的使用者介面 500 毫秒。是你讓我這麼做的!」(不是我幹的,肯定是你幹的!)
過渡語:“這項工作?優先順序很低。我像Snoop Dogg一樣同時做著各種副業。”
懸念提示:“API還在加載中。我很有耐心,好嗎!”
閒置曲目:“簡直就是在做無用功。這會導致失業。”
⚛️元件軌道:
元件樹完整顯示渲染時間。每個元件都以彩色條表示。
顏色越深 = 速度越慢 = 這就是你的問題孩子🤷🏻♀️
我不再把事情憋在心裡。我開始溝通。我敞開心扉。我向你展示我的作品。
說實話,這麼了解自己真的挺累的。 💅
部分預渲染聽起來很棒,但目前還沒有完全成熟的解決方案。 React 19.2 中已經提供了核心 API,但實際部署仍然取決於你的框架和伺服器,所以具體實作方式對我來說還有些模糊。
30 秒內完成 PPR(純 React):
建立(或預先計算)時間:呼叫prerender(<App/>, { signal }) -> 你會得到一個預演(靜態外殼)和一個延遲狀態。將延遲狀態儲存到某個地方(鍵值對/blob/資料庫),並將預演傳送到你的 CDN。
請求時間:載入已儲存的延遲,然後恢復渲染並將動態部分串流傳輸到回應中。
難點在於?你需要自己搭建SSR伺服器,管理狀態存儲,配置所有東西,還要處理資料補全。這有點像管道工程。
使用 Next.js 15,你只需將動態程式碼包裹在<Suspense>標籤中,在配置中將experimental.ppr = true設為 true,即可大功告成。 Next.js 會處理剩下的所有事情——讓你少操心,多享受。
再說一遍,它並不是最聰明的——除非你用框架來引導它。
我以前在SSR期間總是手忙腳亂。現在我會在SSR期間批次設定懸念邊界,也就是說,我會同時顯示多個非同步資料區塊,而不是一次顯示一個。
<Suspense fallback={<LoadingProfile />}>
<Profile />
</Suspense>
<Suspense fallback={<LoadingPosts />}>
<Posts />
</Suspense>
之前:個人資料頁面快速閃現,貼文內容隨後才尷尬地出現。
現在:我等到兩人都準備就緒,然後優雅地、同步地走上舞台。
我已經克服了偏見。我不再是成分論者了,好嗎?法律面前人人平等(當然,這只是我個人的看法😁)。
eslint-plugin-react-hooks v6:該插件理解useEffectEvent ,預設支援扁平化配置,並使您的依賴陣列保持穩定無虞。
useId 前綴更新:已從:r:變更為_r_ ,以支援視圖轉換 API。如果您正在進行伺服器端渲染 (SSR) 並且使用 useId() 來實作輔助功能(而不是像普通使用者那樣使用 nanoid),則此變更很重要。否則,請繼續使用。 😁
React 19.2:優化、完善、穩定。 Si gma 時代已來臨。 💅
現在就去開發點什麼吧。我會在後台編譯,默默地評斷你的 useEffect 依賴項 😉
原文出處:https://dev.to/sagi0312/react-192-react-in-its-sigma-era-op7