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控制路由跳轉的相關資料,文中通過示例代碼介紹的的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2018-01-01在React中實現(xiàn)代碼熱重載(HMR)的操作步驟
在現(xiàn)代 React 開發(fā)中,代碼熱重載(HMR)是一項極大提升開發(fā)效率的技術,它允許在不刷新整個頁面的情況下,實時更新模塊代碼,從而保留應用狀態(tài),避免因頁面刷新導致的狀態(tài)丟失,本文將深入探討如何在 React 項目中實現(xiàn) HMR,包括其原理、配置步驟以及最佳實踐2025-05-05詳解三種方式在React中解決綁定this的作用域問題并傳參
這篇文章主要介紹了詳解三種方式在React中解決綁定this的作用域問題并傳參,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08react 報錯Module build failed: Browserslis
這篇文章主要介紹了react 報錯Module build failed: BrowserslistError: Unknown browser query `dead`問題的解決方法,需要的朋友可以參考下2023-06-06