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

React?Hooks使用startTransition與useTransition教程示例

 更新時(shí)間:2023年01月10日 09:37:12   作者:前端蘭博  
這篇文章主要為大家介紹了React?Hooks使用startTransition與useTransition教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

今天帶來的是react18版本推出的全新hooks:useTransition,它的使用范圍主要是用于性能優(yōu)化,今天我們一探究竟吧。

需求分析

假設(shè)現(xiàn)在有如下需求:當(dāng)用戶在輸入框查詢數(shù)據(jù)時(shí),需要實(shí)時(shí)根據(jù)用戶輸入數(shù)據(jù)進(jìn)行搜索提示項(xiàng)的展示。與以往不同的是,提示列表的個(gè)數(shù)是十分龐大的,每次都在10000條以上。

設(shè)計(jì)過程

import {useState} from "react";
import styles from "./index.module.css";
const Home:React.FC = () => {
  const [val,setVal] = useState('');
  const [arr,setArr] = useState<number[]>([]);
  //根據(jù)用戶輸入獲取查詢列表
  const getList = (e:any) => {
    setVal(e.target.value)
    let arr = Array.from(new Array(10000),item=>Date.now())
    setArr(arr);
  }
  return (
    <div className={styles.box}>
      <input value={val} onChange={getList}/>
      {
          arr.map((item,key)=>(
            <div key={key}>{item}</div>
          ))
      }
    </div>
  )
}
export default Home;

效果展示

我們快速在表單輸入了abcd,但是很明顯出現(xiàn)了卡頓現(xiàn)象,大約2s后表單和列表數(shù)據(jù)都被渲染。

現(xiàn)象分析

由于我們使用了useState對表單和列表的數(shù)據(jù)進(jìn)行了更新,二者觸發(fā)批量更新機(jī)制但無優(yōu)先級差異。實(shí)際上為了保證用戶體驗(yàn)感,我們需要保證輸入框的輸入數(shù)據(jù)永遠(yuǎn)處于最新顯示,而列表的提示可以稍微滯后顯示。 基于優(yōu)先級渲染問題,react提出了startTransition方案。使用startTransition觸發(fā)的更新優(yōu)先級會被降低,從而優(yōu)雅降級,提高頁面刷新和渲染性能。

startTransition使用

在更新大數(shù)據(jù)更新或者大列表dom時(shí),為了頁面性能和渲染優(yōu)化,我們可以對大數(shù)據(jù)或列表的更新過程采用startTransition優(yōu)雅降級處理。

使用

startTransition(()=>{
    //大數(shù)據(jù)列表數(shù)據(jù)獲取
    do...
})

例子改造

import {useState,startTransition} from "react";
import styles from "./index.module.css";
const Home:React.FC = () => {
  const [val,setVal] = useState('');
  const [arr,setArr] = useState<number[]>([]);
  //根據(jù)用戶輸入獲取查詢列表
  const getList = (e:any) => {
    setVal(e.target.value)
    let arr = Array.from(new Array(10000),item=>Date.now());
    startTransition(()=>{
        setArr(arr);
    })
  }
  return (
    <div className={styles.box}>
      <input value={val} onChange={getList}/>
      {
          arr.map((item,key)=>(
            <div key={key}>{item}</div>
          ))
      }
    </div>
  )
}
export default Home;

效果展示

相對于上面未使用startTransition,此處的輸入框數(shù)據(jù)優(yōu)化了許多,并且大數(shù)據(jù)列表展示卡頓達(dá)到了一定程度優(yōu)化。

useTransition

useTransition和startTransition的功能一模一樣,只是通過hooks的展現(xiàn)方式出現(xiàn),并且增加了保存列表是否在渲染等待的狀態(tài)。

使用

第一個(gè)變量保存是否渲染中的狀態(tài),ture表示渲染等待中

第二個(gè)變量和startTransition的使用方式一模一樣

 import {useState,startTransition} from "react";
 const [pending,transition] = useTransition();

例子改造

import React,{useState,useTransition} from "react";
const Home:React.FC = () => {
  const [val,setVal] = useState('');
  const [arr,setArr] = useState<number[]>([]);
  const [pending,transition] = useTransition()
  const getList = (e:any) => {
    setVal(e.target.value)
    let arr = Array.from(new Array(10000),item=>Date.now())
    transition(()=>{
      setArr(arr);
    })
  }
  return (
    <div className={styles.box}>
      <input value={val} onChange={getList}/>
      {
        pending?<h2>loading....</h2>:(
          arr.map((item,key)=>(
            <div key={key}>{item}</div>
          ))
        )
      }
    </div>
  )
}
export default Home;

效果展示

我們根據(jù)useTransition返回的pending狀態(tài)添加判斷,如果列表在渲染中就添加提示加載狀態(tài),否則正常顯示列表。

總結(jié)

在處理大批量數(shù)據(jù)渲染時(shí),通過使用startTransition或useTransition可以很好的提升渲染性能,提高用戶體驗(yàn)感。

以上就是React Hooks使用教程startTransition與useTransition的詳細(xì)內(nèi)容,更多關(guān)于React Hooks startTransition useTransition的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 如何強(qiáng)制刷新react hooks組件

    如何強(qiáng)制刷新react hooks組件

    這篇文章主要介紹了如何強(qiáng)制刷新react hooks組件問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 深入學(xué)習(xí)TypeScript 、React、 Redux和Ant-Design的最佳實(shí)踐

    深入學(xué)習(xí)TypeScript 、React、 Redux和Ant-Design的最佳實(shí)踐

    這篇文章主要介紹了深入學(xué)習(xí)TypeScript 、React、 Redux和Ant-Design的最佳實(shí)踐,TypeScript 增加了代碼的可讀性和可維護(hù)性,擁有活躍的社區(qū),,需要的朋友可以參考下
    2019-06-06
  • ReactNative實(shí)現(xiàn)圖片上傳功能的示例代碼

    ReactNative實(shí)現(xiàn)圖片上傳功能的示例代碼

    本篇文章主要介紹了ReactNative實(shí)現(xiàn)圖片上傳功能的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-07-07
  • 使用 React hooks 實(shí)現(xiàn)類所有生命周期

    使用 React hooks 實(shí)現(xiàn)類所有生命周期

    react 自 16.8 開始,引入了 Hooks 概念,使得函數(shù)組件中也可以擁有自己的狀態(tài),并且可以模擬對應(yīng)的生命周期,這篇文章主要介紹了使用 React hooks 怎么實(shí)現(xiàn)類里面的所有生命周期,需要的朋友可以參考下
    2023-02-02
  • react-native 實(shí)現(xiàn)漸變色背景過程

    react-native 實(shí)現(xiàn)漸變色背景過程

    這篇文章主要介紹了react-native 實(shí)現(xiàn)漸變色背景過程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 在React中強(qiáng)制重新渲染的4 種方式案例代碼

    在React中強(qiáng)制重新渲染的4 種方式案例代碼

    這篇文章主要介紹了在React中強(qiáng)制重新渲染的4 種方式,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-12-12
  • React Fiber樹的構(gòu)建和替換過程講解

    React Fiber樹的構(gòu)建和替換過程講解

    React Fiber樹的創(chuàng)建和替換過程運(yùn)用了雙緩存技術(shù),直接將舊的 fiber 樹替換成新的 fiber 樹,這樣做的好處是省去了直接在頁面上渲染時(shí)的計(jì)算時(shí)間,避免計(jì)算量大導(dǎo)致的白屏、卡頓,現(xiàn)在你一定還不太理解,下面進(jìn)行詳細(xì)講解,需要的朋友可以參考下
    2022-12-12
  • React實(shí)時(shí)預(yù)覽react-live源碼解析

    React實(shí)時(shí)預(yù)覽react-live源碼解析

    這篇文章主要為大家介紹了React實(shí)時(shí)預(yù)覽react-live源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 淺談React Native Flexbox布局(小結(jié))

    淺談React Native Flexbox布局(小結(jié))

    這篇文章主要介紹了淺談React Native Flexbox布局(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • 一文搞懂?React?18?中的?useTransition()?與?useDeferredValue()

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

    這篇文章主要介紹了一文搞懂?React?18?中的?useTransition()與useDeferredValue(),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09

最新評論

和政县| 淄博市| 小金县| 银川市| 长治市| 苏尼特左旗| 山东省| 红安县| 桐柏县| 焉耆| 嘉义县| 富源县| 富锦市| 台北县| 文安县| 嘉义市| 乐昌市| 大田县| 额尔古纳市| 万年县| 株洲县| 东乌珠穆沁旗| 海淀区| 云龙县| 龙州县| 偏关县| 怀集县| 清苑县| 昌邑市| 楚雄市| 泰来县| 中江县| 漾濞| 正宁县| 澄城县| 集贤县| 望城县| 四会市| 罗甸县| 射阳县| 达拉特旗|