網站首頁 編程語言 正文
react在3月29號正式發布了18版本, 此次更新包括: 狀態自動批處理, 客戶端渲染api的更新, 新的hook等很多變化, 本章先說一下狀態批處理的變化.
React v18.0 – React Blog
狀態自動批處理
18版本之前, 在合成事件之外的原生事件中(例如 setTimeout, onclick, promise) , 更新狀態并不會進行批量處理(合并), 這意味著在原生事件中多次調用狀態更新會造成多次應用的重新渲染, 往往我們只需要最后一次即可,?react在18版本后優化了這個問題
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版
點擊四下后,組件渲染了8次
?18版
點擊4下后, 組件渲染了4次
?退出狀態自動批處理
在某些場景下 我們可能不需要批處理狀態更新, 此時我們需要用到 react-dom 提供的flushSync函數, 該函數需傳入一個回調, 并且會同步刷新回調中的狀態更新
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
?要點概述
1. 原生事件內狀態更新改為批量處理
2. 不需要批量處理時 使用 react-dom 提供的flushSync函數, 此函數同步刷新參數回調內的狀態更新
原文鏈接:https://blog.csdn.net/m0_58239318/article/details/124170539
相關推薦
- 2022-02-01 nginx 上傳圖片出現跨域
- 2022-09-15 關于c++11與c風格路徑拼接的速度對比_C 語言
- 2023-03-28 Python中list列表添加元素的3種方法總結_python
- 2022-07-06 使用GO操作MongoDB的方法_Golang
- 2022-03-15 React?Router?V6更新內容詳解_React
- 2022-09-27 C#校驗時間格式的場景分析_C#教程
- 2022-07-19 Python數據分析?Pandas?Series對象操作_python
- 2022-10-23 Python?selenium?八種定位元素的方式_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支