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

React18?中的?Suspense?API使用實例詳解

 更新時間:2022年10月24日 08:56:39   作者:github_is_geeksKai  
這篇文章主要為大家介紹了React18?中的?Suspense?API使用實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

什么是新的 ReactJS Suspense API,什么時候應(yīng)該使用它?

何時使用:當組件開始變大并且您在同一頁面上有許多組件時,您可能希望開始優(yōu)化下載到客戶端瀏覽器的方式和時間。

為此,React 為您提供了lazyAPI,它允許您將組件標記為lazy,這意味著被lazy包裹的組件,將會在第一次真正使用時被加載,而不是頁面初始化的時候。

懶加載優(yōu)化是減少“首屏渲染時間”和其他指標的絕妙方法,這些指標主要是用于衡量應(yīng)用程序首次渲染所需的時間以及“準備好”交互所需的時間。

但是當你使用這種優(yōu)化時,你會遇到一個問題:如果組件下載時間過長會發(fā)生什么?尤其是在網(wǎng)速較慢的情況下。在這種情況下,界面應(yīng)該展示什么?即使用戶看不到,我們該如何讓用戶知道當前界面正在發(fā)生的事情呢?

這就是 Suspense API 發(fā)揮作用的地方,讓我們來看看吧!

什么是Suspense API?

Suspense API 與“lazy”組件結(jié)合使用時,可以讓用戶知道,此時當前界面正在后臺加載某些內(nèi)容。 當瀏覽器在下載需要懶加載的這個組件的過程中,提供替代可視化(不同的組件)來做到這一點。

這里的前提是,這個替代組件(一般loading組件)是一個較低的較小的,并且很可能可以在許多不同的地方重復(fù)使用的組件。這樣話,權(quán)衡是有意義的。

對于本文,我創(chuàng)建了一個 Github 存儲庫,在分支react18-suspense中!

使用時,需要你簡單地用 Suspense 包裝你的lazy組件,同時指定 fallback 屬性。像這樣:

import React, { Suspense, useState } from "react";
import Waiting from "./waiting";
const Text = React.lazy(() => import("./text"));
const Buttons = React.lazy(() => import("./buttons"));
export default function Tabs() {
  const [tab, setTab] = useState("text");
  return (
    <Suspense fallback={<Waiting />}>
        <div style={{ minWidth: "40vw" }}>
        <p>
          <a
            href="#" rel="external nofollow"  rel="external nofollow" 
            onClick={(_) => {
              if (tab == "text") setTab("buttons");
              else setTab("text");
            }}
          >
            Toggle to {tab === "text" ? "buttons" : "text"}
          </a>
        </p>
        <div style={{ minWidth: "40vw" }}>
          {tab === "text" ? <Text /> : <Buttons />}
        </div>
      </div>
    </Suspense>
  );
}

從以上代碼中可以看出,Text 和 Buttons 組件都是會懶加載的,加載它們中的任何一個都需要向服務(wù)器發(fā)出請求。點擊 “Toggle”,可以在兩者之間交替。

現(xiàn)在有趣的是,Suspense 組件不必直接包裝懶加載的組件。它們可以在樹的多個層次上,無論如何都會顯示fallback。所以你不必擔心用它包裝每一個組件,你可以包裝你的組件樹的整個部分,并讓它們都使用相同的fallback。

看上面的 GIF圖,它以白屏開始,因為它下載初始頁面的速度很慢(請注意“網(wǎng)絡(luò)”選項卡上的“slow 3G”設(shè)置)。緊接著,我們會看到“Waiting...”消息,這就是 Waiting fallback。

然后它被一條文本消息替換,即加載的文本組件。我們在這里看到了 Suspense API 的實際應(yīng)用。

然后,當我單擊“切換”鏈接時,將再次看到“waiting...”消息幾秒鐘,而瀏覽器正在第一次下載按鈕組件。

在此之后,組件之間的切換是立即執(zhí)行的,因為它們已經(jīng)加載,并且不再需要 Suspense API。

如果你想了解更多關(guān)于 Suspense 的信息,我建議你閱讀此處的 RFC,因為它為你提供了理解該功能所需的所有上下文。

什么是 transition API?

有興趣的可以移步這篇介紹useTransition的文章!

作為 React 18 的一部分,Suspense API 增加了一個,它允許您以在某些情況下可能對用戶更友好的方式在組件之間進行轉(zhuǎn)換。

如果你回到我們的示例,會注意到,每次單擊“Toggle”時,點擊之前的舊組件消失了,取而代之的是界面上要么顯示最新組件,要么顯示“waiting...”,這樣的交互,可能對用戶來說變化太大了,因此我們可能希望保持點擊之前,依然保持舊組件可見,并讓用戶可以與舊組件進行交互,同時 React在后臺加載新組件。只有在新組件準備好后,它才會用它替換舊組件。

現(xiàn)在,您可以在 React 18 中使用 useTransition API 執(zhí)行此操作,如下所示:

import React, { Suspense, useState, useTransition } from "react";
import Waiting from "./waiting";
const Text = React.lazy(() => import("./text"));
const Buttons = React.lazy(() => import("./buttons"));
export default function Tabs() {
  const [tab, setTab] = useState("text");
  const [isPending, startTransition] = useTransition();
  return (
    <Suspense fallback={<Waiting />}>
      <div style={{ minWidth: "40vw" }}>
        <p>
          <a
            href="#" rel="external nofollow"  rel="external nofollow" 
            onClick={(_) => {
              startTransition(() => {
                if (tab == "text") setTab("buttons");
                else setTab("text");
              });
            }}
          >
            My Toggle to {tab === "text" ? "buttons" : "text"}
          </a>
        </p>
        <div style={{ opacity: isPending ? 0.1 : 1, minWidth: "40vw" }}>
          {tab === "text" ? <Text /> : <Buttons />}
        </div>
      </div>
    </Suspense>
  );
}

這是完全相同的代碼,但是現(xiàn)在當我們單擊“Toggle”時,我們調(diào)用 startTransition 來切換tab,這樣告訴 React 只有在加載完成后才替換組件。

因為缺少了loading狀態(tài),可能會讓用戶有點困惑,所以我們可以從 useTransition 鉤子返回的 isPending 中獲取。這個isPending可以用來表示當前組件正在發(fā)生一些事情,而不會完全破壞用戶的體驗。在我的例子中,我將“舊”組件的不透明度設(shè)置為“0.1”,同時加載“新”組件。

現(xiàn)在,如果要運行此示例,你將看到第一次刷新頁面的時候觸發(fā)了fallback,然后每當用戶手動單擊“Toggle”時,都會調(diào)用startTransition。這為用戶提供了更好的體驗,并且仍然盡可能優(yōu)化。

最后

Suspense API 并不復(fù)雜,也不會給你現(xiàn)有的項目添加太多代碼。但是,如果你的應(yīng)用程序不夠復(fù)雜,你可能不需要使用它。

要確定代碼中是否應(yīng)該使用,我們應(yīng)該問自己的第一個問題是:我在每個頁面上渲染了多少個組件,以及為此加載了多少個組件?要分析我們的應(yīng)用程序的性能,并確定這些組件是否確實導(dǎo)致了一些初始加載時間問題。如果是這樣,那么行的,開始代碼拆分并引入吧!否則,你可以不使用也沒事。

以上就是React18 中的 Suspense API使用實例詳解的詳細內(nèi)容,更多關(guān)于React18 Suspense API的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vite?+?React從零開始搭建一個開源組件庫

    Vite?+?React從零開始搭建一個開源組件庫

    這篇文章主要介紹了Vite?+?React?如何從0到1搭建一個開源組件庫,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • react遞歸組件實現(xiàn)樹的示例詳解

    react遞歸組件實現(xiàn)樹的示例詳解

    在一些react項目中,常常有一些需要目錄樹這種結(jié)構(gòu),這篇文章主要為大家介紹了如何使用遞歸組件實現(xiàn)樹,感興趣的小伙伴可以了解下
    2024-10-10
  • React videojs 實現(xiàn)自定義組件(視頻畫質(zhì)/清晰度切換) 的操作代碼

    React videojs 實現(xiàn)自定義組件(視頻畫質(zhì)/清晰度切換) 的操作代碼

    最近使用videojs作為視頻處理第三方庫,用來對接m3u8視頻類型,這里總結(jié)一下自定義組件遇到的問題及實現(xiàn),感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • React組件中監(jiān)聽函數(shù)獲取不到最新的state問題

    React組件中監(jiān)聽函數(shù)獲取不到最新的state問題

    這篇文章主要介紹了React組件中監(jiān)聽函數(shù)獲取不到最新的state問題問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • react中braft-editor的基本使用方式

    react中braft-editor的基本使用方式

    這篇文章主要介紹了react中braft-editor的基本使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • React路由的history對象的插件history的使用解讀

    React路由的history對象的插件history的使用解讀

    這篇文章主要介紹了React路由的history對象的插件history的使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • React中的Hooks進階理解教程

    React中的Hooks進階理解教程

    這篇文章主要介紹了React中的Hooks進階理解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • React優(yōu)化子組件render的使用

    React優(yōu)化子組件render的使用

    這篇文章主要介紹了React優(yōu)化子組件render的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 深入理解React中Suspense與lazy的原理

    深入理解React中Suspense與lazy的原理

    在react中為我們提供了一個非常有用的組件,那就是Suspense,本文主要介紹了如何使用Suspense?和?react提供的lazy結(jié)合起來達到異步加載狀態(tài)的目的,感興趣的可以了解下
    2024-04-04
  • 詳解React中的setState執(zhí)行機制

    詳解React中的setState執(zhí)行機制

    setState是React組件中用于更新狀態(tài)的方法,是類組件中的方法,用于更新組件的狀態(tài)并重新渲染組件,本文給大家詳細介紹了React中的setState執(zhí)行機制,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-12-12

最新評論

磐石市| 新丰县| 兴山县| 稻城县| 平罗县| 保山市| 克山县| 晋宁县| 晋江市| 普定县| 临安市| 绵竹市| 夏河县| 吴忠市| 巴彦淖尔市| 星子县| 思茅市| 石泉县| 斗六市| 启东市| 梁山县| 吉安县| 思南县| 永丰县| 潞城市| 玛曲县| 深圳市| 郧西县| 辽宁省| 富平县| 汨罗市| 洞口县| 金湖县| 白河县| 河源市| 明水县| 安顺市| 正定县| 宜良县| 乌兰浩特市| 奇台县|