最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文搞懂?React?18?中的?useTransition()?與?useDeferredValue()

 更新時間:2022年09月12日 08:49:04   作者:github_is_geeksKai  
這篇文章主要介紹了一文搞懂?React?18?中的?useTransition()與useDeferredValue(),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

前言

React 18 引入了一個關(guān)鍵的新概念,稱為“Concurrent”。

并發(fā)涉及同時執(zhí)行多個狀態(tài)更新,這可以說是 React 18 中最重要的特性。除了并發(fā)之外,React 18 還引入了兩個新的鉤子,稱為 useTransition() 和 useDeferredValue() 鉤子。

它們都有助于降低狀態(tài)更新的優(yōu)先級,但問題是,何時應(yīng)該使用它們?

什么是Concurrent React?

根據(jù)官方 React18 Docs,并發(fā) React 是:

一種新的幕后機制,使 React 能夠同時準(zhǔn)備多個版本的 UI。您可以將并發(fā)視為一個實現(xiàn)細節(jié)——它的價值在于它的特性。

并發(fā)可以定義為同時執(zhí)行大量任務(wù)的能力。并發(fā)并不是一個特性。相反,它是一個幕后功能,它允許 React 同時(并發(fā)地)準(zhǔn)備許多 UI 實例。 React 以一種對開發(fā)人員隱藏實現(xiàn)細節(jié)的方式創(chuàng)建 API。 React 創(chuàng)建者認為,React 開發(fā)人員應(yīng)該專注于 React 功能將如何幫助他們實現(xiàn)他們希望為客戶提供的用戶體驗,并且 React 將弄清楚如何提供這種體驗。

Concurrent React 不僅僅是一個實現(xiàn)細節(jié)。相反,它是更新框架核心渲染架構(gòu)的重大升級。因此,了解它在 React 18 中是如何工作的至關(guān)重要。

設(shè)置項目

對于本文,我創(chuàng)建了一個 Github 存儲庫,在其中我構(gòu)建了一個簡單的演示產(chǎn)品應(yīng)用程序,允許用戶通過輸入產(chǎn)品編號來查看產(chǎn)品。首先,您必須克隆包含所有項目啟動文件的 Github 存儲庫。要克隆 Github 存儲庫,請轉(zhuǎn)到終端并運行以下命令:

git clone https://github.com/geekskai/react18-feature.git

完成克隆過程后,轉(zhuǎn)到項目文件夾,在代碼編輯器上打開它,轉(zhuǎn)到編輯器終端,然后通過運行npm install 或安裝腳本和依賴項 yarn install然后,要啟動項目,請執(zhí)行 npm start

應(yīng)用程序啟動后,它應(yīng)該如下所示:

實現(xiàn) useTransition()

當(dāng)您第一次輸入產(chǎn)品編號以獲取product時,您會注意到它幾乎會立即更新,即使它是一個包含 10,000 項要瀏覽的超長列表。

現(xiàn)在,當(dāng)您轉(zhuǎn)到 Chrome 瀏覽器的開發(fā)人員工具部分,轉(zhuǎn)到性能選項卡,打開 CPU 節(jié)流并將 CPU 速度降低 4 倍時,問題就開始了。

如果您現(xiàn)在在降低 CPU 速度后嘗試輸入產(chǎn)品編號,您會注意到更新變得更慢且卡頓明顯。甚至整個界面看起來和感覺都很遲鈍,尤其是輸入字段,現(xiàn)在在我們輸入和刪除時感覺沒有響應(yīng)。 而這絕對不是一個好的用戶體驗。

你看不到我在打字,但界面響應(yīng)很慢,如上所示。甚至在 React18 之前,一個標(biāo)準(zhǔn)的解決方案不是一次處理 10,000 個項目或產(chǎn)品(在我們的例子中)。您可以使用分頁或任何其他技術(shù),或者在服務(wù)器端而不是客戶端進行過濾。這些都是您在遇到此類問題時可以考慮的所有可能的解決方案。

但是,如果您需要在客戶端執(zhí)行這種操作,即在您的客戶端代碼上,那么使用 React18,您現(xiàn)在擁有一些工具,可以通過延遲一些狀態(tài)更新操作來為用戶提供更好的感知性能通過告訴 React 一些更新操作比其他操作具有更高的優(yōu)先級。這就是 React 18 引入的并發(fā)以及相關(guān)的鉤子和函數(shù)背后的想法。

useTransition() 告訴 React 一些狀態(tài)更新具有較低的優(yōu)先級,即每個其他狀態(tài)更新或 UI 渲染觸發(fā)器具有較高的優(yōu)先級。當(dāng)我們調(diào)用 useTransition() 時,我們得到一個包含兩個元素的數(shù)組:一個 isPending 布爾值,它指示低優(yōu)先級狀態(tài)更新是否仍處于掛起狀態(tài),以及一個 startTransition() 函數(shù),您可以將狀態(tài)更新包裝起來告訴 React這是一個低優(yōu)先級的更新。

查看如何使用 useTransition() 鉤子。首先,轉(zhuǎn)到 App.js 文件并編輯代碼,如下所示:

function App() {
  const [isPending, startTransition] = useTransition();
  const [filterTerm, setFilterTerm] = useState('');
  
  const filteredProducts = filterProducts(filterTerm);
  
  function updateFilterHandler(event) {
    startTransition(() => {
      setFilterTerm(event.target.value);
    });
  }
 
  return (
    <div id="app">
      <input type="text" onChange={updateFilterHandler} />
      <ProductList products={filteredProducts} />
    </div>
  );
}

因為 startTransition() 包裝了 setFilterTerm() 狀態(tài)更新函數(shù),所以 React 給這個狀態(tài)更新代碼一個較低的優(yōu)先級。這可確保輸入字段保持響應(yīng)并立即響應(yīng)演示應(yīng)用程序中的擊鍵。如果未使用 useTransition(),應(yīng)用程序可能會變得無響應(yīng),尤其是在速度較慢的設(shè)備上。當(dāng)您輸入產(chǎn)品編號時,您會看到代碼現(xiàn)在響應(yīng)速度更快且延遲更少,即使 CPU 已減慢 4 倍。您可以在您的系統(tǒng)上嘗試此操作并查看結(jié)果。

但是,您不應(yīng)該開始使用 startTransition 來結(jié)束所有狀態(tài)更新。僅當(dāng)您的用戶界面較慢時才使用它,尤其是在舊設(shè)備上,或者在您沒有其他解決方案可使用的情況下。這是因為它占用了額外的性能。

isPending 是做什么的?

isPending 告訴您當(dāng)前是否有一些狀態(tài)更新仍處于待處理狀態(tài)(React 尚未執(zhí)行,并且優(yōu)先級較低。您可以使用 isPending 更新 UI 以在等待主要狀態(tài)時顯示一些后備內(nèi)容更新完成。

我們可以在 App.ts 文件中的以下代碼中看到這一點:

return (
    <div id="app">
      <input type="text" onChange={updateFilterHandler} />
      {isPending && <p style={{color: 'white'}}>Updating list..</p>}
      <ProductList products={filteredProducts} />
    </div>
  );
}

實現(xiàn)代碼后,您應(yīng)該能夠在運行應(yīng)用程序時看到如下內(nèi)容:

因此,這也是您在使用 useTransition() 時可以使用的功能。另外,請注意觀察實現(xiàn) useTransition() 功能后它的響應(yīng)速度有多快。

到此這篇關(guān)于一文搞懂 React 18 中的 useTransition() 與 useDeferredValue()的文章就介紹到這了,更多相關(guān)React useDeferredValue內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React?中使用?react-i18next?國際化的過程(react-i18next?的基本用法)

    React?中使用?react-i18next?國際化的過程(react-i18next?的基本用法)

    i18next?是一款強大的國際化框架,react-i18next?是基于?i18next?適用于?React?的框架,本文介紹了?react-i18next?的基本用法,如果更特殊的需求,文章開頭的官方地址可以找到答案
    2023-01-01
  • 詳解React Hooks是如何工作的

    詳解React Hooks是如何工作的

    React Hooks是在React 16.8版本新增的特性,在我看了React官網(wǎng)和一些博客對React Hook的講解后還是覺得沒有g(shù)et到本質(zhì)。本篇博客通過手動實現(xiàn)useState()來了解Hook的原理和本質(zhì)。閱讀此篇博客的前提是你要知道一些 React Hooks的基本用法和使用規(guī)則,不然會看得云里霧里。
    2021-05-05
  • React實現(xiàn)錨點跳轉(zhuǎn)組件附帶吸頂效果的示例代碼

    React實現(xiàn)錨點跳轉(zhuǎn)組件附帶吸頂效果的示例代碼

    這篇文章主要為大家詳細介紹了React如何實現(xiàn)移動端錨點跳轉(zhuǎn)組件附帶吸頂效果,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • React中useMemo、useCallback的具體使用

    React中useMemo、useCallback的具體使用

    useMemo和useCallback是React中用于緩存計算結(jié)果和函數(shù)的Hooks,本文就來介紹一下useMemo、useCallback的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-01-01
  • React state狀態(tài)屬性詳細講解

    React state狀態(tài)屬性詳細講解

    React將組件(component)看成一個狀態(tài)機(State Machines),通過其內(nèi)部自定義的狀態(tài)(State)和生命周期(Lifecycle)實現(xiàn)并與用戶交互,維持組件的不同狀態(tài)
    2022-09-09
  • React利用React.memo和useCallback緩存彈窗組件

    React利用React.memo和useCallback緩存彈窗組件

    本文主要介紹了React利用React.memo和useCallback緩存彈窗組件,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-07-07
  • React如何避免子組件無效刷新

    React如何避免子組件無效刷新

    這篇文章主要介紹了React幾種避免子組件無效刷新的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • react如何實現(xiàn)一個密碼強度檢測器詳解

    react如何實現(xiàn)一個密碼強度檢測器詳解

    這篇文章主要給大家介紹了關(guān)于react如何實現(xiàn)一個密碼強度檢測器的相關(guān)資料,使用這個密碼強度器后可以幫助大家提高在線帳號、個人信息的安全性,需要的朋友可以參考下
    2021-06-06
  • 淺談python的函數(shù)知識

    淺談python的函數(shù)知識

    這篇文章主要為大家介紹了python的函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • React Router v4 入坑指南(小結(jié))

    React Router v4 入坑指南(小結(jié))

    這篇文章主要介紹了React Router v4 入坑指南(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04

最新評論

芜湖市| 驻马店市| 南召县| 湖北省| 左贡县| 邳州市| 城市| 连山| 阳城县| 本溪市| 铁岭县| 封开县| 岳普湖县| 安顺市| 仁化县| 宜丰县| 夹江县| 青州市| 行唐县| 肇东市| 衡水市| 安徽省| 勃利县| 临颍县| 丹凤县| 抚松县| 绩溪县| 壤塘县| 韶关市| 诏安县| 龙陵县| 紫金县| 山阳县| 上饶市| 同江市| 邵东县| 敦煌市| 扬州市| 高唐县| 天津市| 铅山县|