欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

引言

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

需求分析

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

設計過程

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

startTransition使用

在更新大數(shù)據(jù)更新或者大列表dom時,為了頁面性能和渲染優(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ù)列表展示卡頓達到了一定程度優(yōu)化。

useTransition

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

使用

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

第二個變量和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),否則正常顯示列表。

總結

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

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

相關文章

  • react-router v4如何使用history控制路由跳轉詳解

    react-router v4如何使用history控制路由跳轉詳解

    這篇文章主要給大家介紹了關于react-router v4如何使用history控制路由跳轉的相關資料,文中通過示例代碼介紹的的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-01-01
  • React18中的useDeferredValue示例詳解

    React18中的useDeferredValue示例詳解

    這篇文章主要介紹了React18中的useDeferredValue的相關知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 在React中實現(xiàn)代碼熱重載(HMR)的操作步驟

    在React中實現(xiàn)代碼熱重載(HMR)的操作步驟

    在現(xiàn)代 React 開發(fā)中,代碼熱重載(HMR)是一項極大提升開發(fā)效率的技術,它允許在不刷新整個頁面的情況下,實時更新模塊代碼,從而保留應用狀態(tài),避免因頁面刷新導致的狀態(tài)丟失,本文將深入探討如何在 React 項目中實現(xiàn) HMR,包括其原理、配置步驟以及最佳實踐
    2025-05-05
  • 基于react后端渲染模板引擎noox發(fā)布使用

    基于react后端渲染模板引擎noox發(fā)布使用

    本篇文章主要介紹了基于react后端渲染模板引擎noox發(fā)布使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • 詳解三種方式在React中解決綁定this的作用域問題并傳參

    詳解三種方式在React中解決綁定this的作用域問題并傳參

    這篇文章主要介紹了詳解三種方式在React中解決綁定this的作用域問題并傳參,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Modal.confirm是否違反了React模式分析

    Modal.confirm是否違反了React模式分析

    這篇文章主要為大家介紹了Modal.confirm是否違反了React模式分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 詳解react-router如何實現(xiàn)按需加載

    詳解react-router如何實現(xiàn)按需加載

    本篇文章主要介紹了react-router如何實現(xiàn)按需加載,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • react 報錯Module build failed: BrowserslistError: Unknown browser query `dead`問題的解決方法

    react 報錯Module build failed: Browserslis

    這篇文章主要介紹了react 報錯Module build failed: BrowserslistError: Unknown browser query `dead`問題的解決方法,需要的朋友可以參考下
    2023-06-06
  • useEffect支持async及await使用方式

    useEffect支持async及await使用方式

    這篇文章主要為大家介紹了useEffect支持async及await的使用方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • React實踐之Tree組件的使用方法

    React實踐之Tree組件的使用方法

    本篇文章主要介紹了React實踐之Tree組件的使用方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論