網站首頁 編程語言 正文
useMemo
把“創建”函數和依賴項數組作為參數傳?入useMemo,它僅會在某個依賴項改變時才重新計算memoized 值。這種優化有助于避免在每次渲染時都進?行行?高開銷的計算。
importReact, { useState, useMemo } from"react"; export default functionUseMemoPage(props) { const [count, setCount] =useState(0); constexpensive=useMemo(() => { console.log("compute"); let sum=0; for (leti=0; i<count; i++) { sum+=i; } return sum;//只有count變化,這?里里才重新執?行行 }, [count]); const [value, setValue] =useState(""); return (<div><h3>UseMemoPage</h3> <p>expensive:{expensive}</p><p>{count}</p> <button onClick={() =>setCount(count+1)}>add</button> <input value={value} onChange={event=>setValue(event.target.value)} /></div> ); }
useCallback
把內聯回調函數及依賴項數組作為參數傳?入useCallback,它將返回該回調函數的 memoized 版本,該回調函數僅在某個依賴項改變時才會更更新。當你把回調函數傳遞給經過優化的并使?用引?用相等性去避免?非必要渲染(例例如shouldComponentUpdate)的?子組件時,它將?非常有?用
importReact, { useState, useCallback, PureComponent } from"react"; export default function UseCallbackPage(props) { const [count, setCount] =useState(0); const addClick=useCallback(() => { let sum=0; for (leti=0; i<count; i++) { sum+=i; } return sum; }, [count]); const [value, setValue] =useState(""); return ( <div><h3>UseCallbackPage</h3> <p>{count}</p> <buttononClick={() =>setCount(count+1)}>add</button> <inputvalue={value} onChange={event=>setValue(event.target.value)} /> <ChildaddClick={addClick} /></div> ); } class ChildextendsPureComponent { render() { console.log("child render"); const { addClick } =this.props; return ( <div><h3>Child</h3> <buttononClick={() =>console.log(addClick())}>add</button></div> ) } }
useCallback(fn, deps)相當于useMemo(() => fn, deps)。
注意依賴項數組不不會作為參數傳給“創建”函數。雖然從概念上來說它表現為:所有“創建”函數中引?用的值都應該出現在依賴項數組中。未來編譯器?會更更加智能,屆時?自動創建數組將成為可能。
補充介紹React的memo與useMemo及useCallback
React.memo
- 概念解析
- 將組件在相同的情況下的渲染結果,緩存渲染結果
- 當組件傳入
props
相同的參數時,淺對比之后有之前的傳入項,則復用緩存最近一次結果 - 數據對比,只做淺對比。如果需要控制對比過程,需要自己寫自定義比對函數。傳參數置第二個參數 -請注意不要與
shouldComponetUpdate
返回值混合
類組件通過比對數據,可以控制渲染的方式?
React.PureComponent
shouldComponentUpdate
hooks的useMemo
- 概念解析
- 函數組件的緩存渲染結果
- 可以將當前的組件節點顆粒化
- 通過第二個參數去判斷,是否更新useMemo的回調函數
- 回調函數是一個必包,如果創建使用了
useState
,會緩存 state 值,不會拿到實時更新的值
hooks的useCallback
- 概念解析
- 返回一個需要緩存的函數
- 傳遞需要更新的依賴項,一般回調函數內部使用的數據,都需要添加在依賴項中
- 避免父子之間,子級生成新的props函數,從而刷新子組件
- 當父級組件傳遞給子級組件一個函數時,無狀態組件每次都會重新生成新的props函數,導致子組件刷新
- 一般聯合useMemo一起使用
原文鏈接:https://www.cnblogs.com/jiajialove/p/16595701.html
相關推薦
- 2022-07-12 linux中刪除指定文件以外的其它所有文件
- 2022-03-22 C++計算圓形、矩形和三角形的面積_C 語言
- 2022-11-01 詳解批處理文件語法_DOS/BAT
- 2022-05-23 Python的代理類實現,控制訪問和修改屬性的權限你都了解嗎_python
- 2022-06-06 layui 日期格式不正確(date、datetime)區別
- 2022-03-23 .Net?Core微服務網關Ocelot基礎介紹及集成_自學過程
- 2022-12-24 Go中函數的使用細節與注意事項詳解_Golang
- 2024-03-07 做springboot-分模塊技術時新建立Maven模塊時報錯
- 最近更新
-
- 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同步修改后的遠程分支