React18之狀態(tài)批處理的使用
react在3月29號正式發(fā)布了18版本, 此次更新包括: 狀態(tài)自動批處理, 客戶端渲染api的更新, 新的hook等很多變化, 本章先說一下狀態(tài)批處理的變化.
狀態(tài)自動批處理
18版本之前, 在合成事件之外的原生事件中(例如 setTimeout, onclick, promise) , 更新狀態(tài)并不會進(jìn)行批量處理(合并), 這意味著在原生事件中多次調(diào)用狀態(tài)更新會造成多次應(yīng)用的重新渲染, 往往我們只需要最后一次即可, react在18版本后優(yōu)化了這個(gè)問題
import { useState } from 'react' function App() { const [num1, setNum1] = useState(1) const [num2, setNum2] = useState(1) const add = () => { setTimeout(() => { setNum1((pre) => pre + 1) setNum2((pre) => pre + 1) }) } console.log('渲染了') return ( <div className="App"> <header className="App-header">react 18</header> <p>num1 : {num1}</p> <p>num2 : {num2}</p> <button onClick={add}>+1</button> </div> ) } export default App
17版
點(diǎn)擊四下后,組件渲染了8次
18版
點(diǎn)擊4下后, 組件渲染了4次
退出狀態(tài)自動批處理
在某些場景下 我們可能不需要批處理狀態(tài)更新, 此時(shí)我們需要用到 react-dom 提供的flushSync函數(shù), 該函數(shù)需傳入一個(gè)回調(diào), 并且會同步刷新回調(diào)中的狀態(tài)更新
import { useState } from 'react' import { flushSync } from 'react-dom' function App() { const [num1, setNum1] = useState(1) const [num2, setNum2] = useState(1) const add = () => { setTimeout(() => { flushSync(() => { setNum1((pre) => pre + 1) }) flushSync(() => { setNum2((pre) => pre + 1) }) }) } console.log('渲染了') console.log(num1, num2) return ( <div className="App"> <header className="App-header">react 18</header> <p>num1 : {num1}</p> <p>num2 : {num2}</p> <button onClick={add}>+1</button> </div> ) } export default App
要點(diǎn)概述
1. 原生事件內(nèi)狀態(tài)更新改為批量處理
2. 不需要批量處理時(shí) 使用 react-dom 提供的flushSync函數(shù), 此函數(shù)同步刷新參數(shù)回調(diào)內(nèi)的狀態(tài)更新
到此這篇關(guān)于React18之狀態(tài)批處理的使用的文章就介紹到這了,更多相關(guān)React18 狀態(tài)批處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
react實(shí)現(xiàn)可播放的進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了react實(shí)現(xiàn)可播放的進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03react實(shí)現(xiàn)頭部導(dǎo)航,選中狀態(tài)底部出現(xiàn)藍(lán)色條塊問題
這篇文章主要介紹了react實(shí)現(xiàn)頭部導(dǎo)航,選中狀態(tài)底部出現(xiàn)藍(lán)色條塊問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11React Hook 父子組件相互調(diào)用函數(shù)方式
這篇文章主要介紹了React Hook 父子組件相互調(diào)用函數(shù)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09D3.js(v3)+react 實(shí)現(xiàn)帶坐標(biāo)與比例尺的柱形圖 (V3版本)
這篇文章主要介紹了D3.js(v3)+react 制作 一個(gè)帶坐標(biāo)與比例尺的柱形圖 (V3版本) ,本文通過實(shí)例代碼文字相結(jié)合的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2019-05-05如何在React?Native開發(fā)中防止滑動過程中的誤觸
在使用React?Native開發(fā)的時(shí),當(dāng)我們快速滑動應(yīng)用的時(shí)候,可能會出現(xiàn)誤觸,導(dǎo)致我們會點(diǎn)擊到頁面中的某一些點(diǎn)擊事件,誤觸導(dǎo)致頁面元素響應(yīng)從而進(jìn)行其他操作,表現(xiàn)出非常不好的用戶體驗(yàn)。2023-05-05