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

React18新增特性介紹

 更新時(shí)間:2022年09月02日 08:37:51   作者:快樂的蜜蜂  
react歷次版本迭代主要想解決的是兩類導(dǎo)致網(wǎng)頁卡頓的問題,分別是cpu密集型任務(wù)和io密集型任務(wù)導(dǎo)致的卡頓問題,react18新增特性就是為了解決上述問題

React 18 最新的特性
批處理文件
在同一個(gè) 函數(shù)中, 調(diào)用多次 useState 也只是會(huì)更新一次

function App() {
  const [count, setCount] = useState(0);
  const [flag, setFlag] = useState(false);
  function handleClick() {
    setCount(c => c + 1); // 不觸發(fā)re-render
    setFlag(f => !f); // 不觸發(fā)re-render
    // 在調(diào)用結(jié)束是只觸發(fā)一次re-render(這就是batching)
  }
  return <button onClick={handleClick}>Next</button>;
}

但是在React 18以前,對于在異步回調(diào)中調(diào)用的updates,React Batching將無法生效:

function handleClick() {
  fetchSomething().then(() => {
  setCount(c => c + 1); // 觸發(fā)re-render
  setFlag(f => !f); // 再次觸發(fā)re-render
  });
}

這是因?yàn)樵赗eact 18之前,React只在事件處理程序期間批量更新。默認(rèn)情況下,React不會(huì)對promise、setTimeout或任意event事件中的更新進(jìn)行批處理。
在 React 18 版本 的這個(gè)flushSync 就可以達(dá)到批量更新

import { flushSync } from 'react-dom';
flushSync(() => {
setCount(c => c + 1); 
setFlag(f => !f); 
});

批量更新 但是render 值渲染一次, 節(jié)省了 dom的渲染性能

更新狀態(tài):

緊急更新(Urgent updates):反映直接的交互,如輸入、點(diǎn)擊、按鍵按下等等。

過渡更新(Transition updates):將UI從一個(gè)視圖過渡到另一個(gè)視圖。

輸入、點(diǎn)擊、按鍵按下等需要立即響應(yīng)以符合人類的物理認(rèn)知,符合人的直覺。但是過渡更新卻不同,用戶不會(huì)期望看到中間的轉(zhuǎn)換過程(只需要結(jié)果),因此可能不需要立即更新視圖。
在React 18以前的版本所有的更新都會(huì)認(rèn)為是緊急更新。而startTransition提供api給用戶來手動(dòng)將某些更新標(biāo)記為非緊急更新,從而避免浪費(fèi)時(shí)間去渲染不必要的內(nèi)容。

如下面的例子:

// 在界面上顯示用戶輸入

setInputValue(input);

// 在界面上呈現(xiàn)查詢結(jié)果

setSearchQuery(input);

setInputValue會(huì)立即更新用戶的輸入到界面上,屬于需要緊急更新的操作。setSearchQuery是根據(jù)用戶輸入,查詢相應(yīng)的內(nèi)容,用戶可以輸入很多次,如果一直查詢會(huì)可能會(huì)導(dǎo)致過多的js計(jì)算消耗在查詢上面(甚至阻塞輸入操作),而一般來說用戶的期望值是「等待輸入完成之后,查詢并顯示最終的結(jié)果」,因此這里的setSearchQuery可以看成是非緊急更新。
通過startTransition包裹setSearchQuery將其標(biāo)記為非緊急更新:

setInputValue(input);
// 標(biāo)記為非緊急更新
startTransition(() => {
React.setSearchQuery(input);
});

setTimeout的區(qū)別

就上面setSearchQuery的例子,使用setTimeout(或者debounce or throttle)也能達(dá)到相似的目的,那這個(gè)startTransition和setTimeout有啥區(qū)別?
一個(gè)重要區(qū)別是setTimeout是「延遲」執(zhí)行,startTransition是立即執(zhí)行的,傳遞給startTransition的函數(shù)是同步運(yùn)行,但是其內(nèi)部的所有更新都會(huì)標(biāo)記為非緊急,React將在稍后處理更新時(shí)決定如何render這些updates,這意味著將會(huì)比setTimeout中的更新更早地被render。

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

相關(guān)文章

  • React?實(shí)現(xiàn)爺孫組件間相互通信

    React?實(shí)現(xiàn)爺孫組件間相互通信

    這篇文章主要介紹了React實(shí)現(xiàn)爺孫組件間相互通信,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-08-08
  • 簡單介紹react redux的中間件的使用

    簡單介紹react redux的中間件的使用

    這篇文章主要介紹了簡單介紹redux的中間件的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04
  • react-redux action傳參及多個(gè)state處理的實(shí)現(xiàn)

    react-redux action傳參及多個(gè)state處理的實(shí)現(xiàn)

    本文主要介紹了react-redux action傳參及多個(gè)state處理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • react表單受控的實(shí)現(xiàn)方案

    react表單受控的實(shí)現(xiàn)方案

    數(shù)據(jù)的受控控制一直是react里的一個(gè)痛點(diǎn),當(dāng)我想要實(shí)現(xiàn)一個(gè)輸入框的受控控制時(shí),我需要定義一個(gè)onChange和value,手動(dòng)去實(shí)現(xiàn)數(shù)據(jù)的綁定,本文小編給大家介紹了react表單受控的實(shí)現(xiàn)方案,需要的朋友可以參考下
    2023-12-12
  • 詳解使用React.memo()來優(yōu)化函數(shù)組件的性能

    詳解使用React.memo()來優(yōu)化函數(shù)組件的性能

    本文講述了開發(fā)React應(yīng)用時(shí)如何使用shouldComponentUpdate生命周期函數(shù)以及PureComponent去避免類組件進(jìn)行無用的重渲染,以及如何使用最新的React.memo API去優(yōu)化函數(shù)組件的性能
    2019-03-03
  • 在react項(xiàng)目中使用antd的form組件,動(dòng)態(tài)設(shè)置input框的值

    在react項(xiàng)目中使用antd的form組件,動(dòng)態(tài)設(shè)置input框的值

    這篇文章主要介紹了在react項(xiàng)目中使用antd的form組件,動(dòng)態(tài)設(shè)置input框的值,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • React Hook 父子組件相互調(diào)用函數(shù)方式

    React Hook 父子組件相互調(diào)用函數(shù)方式

    這篇文章主要介紹了React Hook 父子組件相互調(diào)用函數(shù)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • React合成事件原理解析

    React合成事件原理解析

    事件是在編程時(shí)系統(tǒng)內(nèi)發(fā)生的動(dòng)作或者發(fā)生的事情,而開發(fā)者可以某種方式對事件做出回應(yīng),而這里有幾個(gè)先決條件,這篇文章主要介紹了React合成事件原理解析,需要的朋友可以參考下
    2022-07-07
  • react路由基礎(chǔ)解讀(Router、Link和Route)

    react路由基礎(chǔ)解讀(Router、Link和Route)

    這篇文章主要介紹了react路由基礎(chǔ)解讀(Router、Link和Route),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 深入理解React中Suspense與lazy的原理

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

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

最新評(píng)論

文昌市| 财经| 盐津县| 建平县| 鄂尔多斯市| 综艺| 息烽县| 株洲市| 子长县| 长寿区| 苏尼特左旗| 巍山| 余干县| 敦化市| 南投市| 徐汇区| 荥经县| 浪卡子县| 理塘县| 门源| 曲沃县| 齐齐哈尔市| 武鸣县| 长子县| 逊克县| 晋中市| 洱源县| 班戈县| 萍乡市| 邳州市| 宁海县| 九江县| 鞍山市| 宾阳县| 潜山县| 环江| 汝城县| 无棣县| 巴楚县| 尉犁县| 林州市|