React 18 - 了解 useSyncExternalStore
在深入 useSyncExternalStore
之前,讓我們先了解一下一些新的術語。
併發渲染與 startTransition
併發指的是基於分配任務的優先順序同時執行多個任務的機制。如果您還不明白這個觀念可以參考 Dan Abramov 的說明
在深入 useSyncExternalStore
之前,讓我們先了解一下一些新的術語。
startTransition
併發指的是基於分配任務的優先順序同時執行多個任務的機制。如果您還不明白這個觀念可以參考 Dan Abramov 的說明
我們廢話不多說直接進入程式碼的部分。如果您在找尋 15 分鐘快速實作,那本篇就是。
本篇會使用 TypeScript,但我們會在寫完程式之後才添加型別。這不是正常的流程,但因為部分讀者不使用 TypeScript 因此我們不想讓您混亂。一般來說我們應該在寫程式的時候就建立型別,才可以在一開始就享受 TypeScript 的好處。
很長一段時間在 JavaScript 對於深度複製或說深拷貝我們都需要自己處理或者使用函式庫。現在平台支援了 structuredClone
本文只是快速看一下 Remix 的賣點,至於推不推暫時不好說,待筆者更深入研究分享,但..就目前官網提供的下面賣點,我是已經被點火了。
Remix 專注在網頁的基礎組成和 UX,更簡單的建置更棒的網站。
筆者:乍看之下,用不精準的感覺形容就是 Meteor 流星 React 版。
useEffect
應該在瀏覽器渲染( paint()
)之後執行,以防止阻塞更新。但您知道它並沒有保證一定在渲染之後觸發?在 useLayoutEffect
中更新狀態(state
)會導致同一次渲染中的 useEffect
在渲染之前執行,這是為了有效率的處理佈局的效果。感到困惑嗎?
React 18 alpha 已經釋出,穩定版可能幾個月後就會跟進。是時候聊聊加入的新功能了。如果您本來就不知道 React 那您可以略過這篇文章。
介紹新功能之前,我們先來看一些您有可能不熟的概念,例如 SSR,Suspense 還有 Hydration。如果您已經知道這些,您可以直接跳到 React 18 的變更一章。
伺服器端渲染 SSR 主要和改善使用者體驗和 SEO 有關,並不是針對改善應用程式的效能。當客戶端對一般 React 應用程式請求頁面時,伺服器會回應一些檔案。這種情境下有兩個很重要的檔案:第一個是一個幾乎為空的 HTML,第二個就是 bundle.js
。應用程式依據路由在這個空的 HTML 中利用 JS 動態產生內容。這種模式叫做客戶端渲染,因為主要是由客戶端動態渲染。使用者最一開始會看到空白的頁面,接著當 bundle.js
下載完畢會動態渲染。
在為我們的專案(React)進行程式碼審查的時候,我常發現開發成員沒有意識到關於 useState
提供的一些好用功能或討厭的陷阱。雖然這些觀念不是什麼重大的啟發,但每一個使用 Hook 的人都應該要了解。
本文為翻譯自 Comparing the New Generation of Build Tools 一文加上更新補充。因建置工具更新速度關係,如遇部分內容無法實作或不一致請參考各官方文件。
過去的一年出現了一堆新的開發工具,它們緊跟著那些目前佔據前端世界的建置工具例如:webpack,Babel,Rollup,Parcel,create-react-app。
這些新工具的目的並不是實現一模一樣功能,它們各自有不同想嘗試解決的問題或新增的功能。儘管有所不同,但這些工具都有著共同的目標:改善開發者體驗。
具體來說,本文希望試著分析每個新工具,概述它們的功能,以及為什麼我們需要它們和適用的情境。我知道項目之間的比較很難非常公平,再一次強調這裡比較的項目,它們的關係並非直接的競品。實際上例如 Snowpack 底層就有使用 esbuild 來處理某些事情。
本文的目的是更進一步了解這些工具的前景和它們提供什麼功能可以讓我們簡化開發流程。如此一來我們就知道能有什麼選擇,以及它們是如何組成的,然後在需要的時候我們可以做出比較好的決定。
當然這些論述有受到我使用 React 和 Preact 經驗的影響。個人比較熟悉這些函式庫,但我們也會探討對其他前端函式庫的支援和使用。
關於這些新工具網路上有許多不錯的文章,影片,廣播等。推薦 ShopTalk Show Episode 454 探討關於 Vite 以及 Episode 448 Snowpack 和 wmr 作者的介紹。從這些影片介紹我們知道這些工具如何加速優化了我們的開發工作。
[toc]
React DnD 是 React 一系列的單元功能,用來協助您建置介面上複雜的拖拉功能同時維持元件解耦。特別適合像是 Trello 類型的應用程式利用拖拉來轉移資料,並依據拖拉事件變更的狀態改變元件的外觀。
1 | $ npm i react-dnd react-dnd-html5-backend |