react組件memo useMemo useCallback使用區(qū)別示例
正文
memo用來優(yōu)化函數(shù)組件的重復(fù)渲染行為,針對(duì)的是一個(gè)組件
useMemo返回一個(gè)memoized的值
本質(zhì)都是用同樣的算法來判定依賴是否發(fā)生改變,繼而決定是否觸發(fā)memo或者useMemo中的邏輯,利用memo就可以避免不必要的重復(fù)計(jì)算,減少資源浪費(fèi)
useCallback返回一個(gè)memoized的函數(shù)
useMemo和useCallback都接收兩個(gè)參數(shù),第一個(gè)參數(shù)為fn,第二個(gè)參數(shù)為[],數(shù)組中是變化依賴的參數(shù) memo則可以直接作用于組件,例如
export default memo(Mycomponent)
useMemo和useEffect的執(zhí)行時(shí)機(jī)是不一致的:useEffect執(zhí)行的是副作用,所以一定是在渲染之后執(zhí)行的,useMemo是需要有返回值的,而返回值可以直接參與渲染的,所以u(píng)seMemo是在渲染期間完成的
memo使用
// 父組件
const Parent = ()=>{
const [count, setCount] = useState(1)
const addCount = ()=>{
setCount(count + 1)
}
return(
<>
<div onClick={addCount}>計(jì)數(shù): {count}</div>
<Child />
</>
)
}
// 子組件
const Child = memo(()=>{
console.log('child start---')
return(
<div>child...</div>
)
})
// 使用memo后,子組件的props或者state沒有變化時(shí),將不會(huì)對(duì)子組件進(jìn)行渲染
useMemo使用
const sum = ()=>{
return a+b
}
const result = useMemo(()=>{sum()},[a,b])
// 只有在a或者b的值變化時(shí)才會(huì)觸發(fā)sum函數(shù)執(zhí)行
useCallback使用
// 父組件,給子組件傳遞name和changeName方法
const Parent = () => {
const [count, setCount] = useState(1);
const [name, setName] = useState("bbz");
const addCount = () => {
setCount(count + 1);
};
const changeName = useCallback((n) => {
setName(n);
}, []);
return (
<>
<div onClick={addCount}>計(jì)數(shù): {count}</div>
<Child name={name} changeName={changeName} />
</>
);
};
// 子組件
const Child = ({ name, changeName }) => {
console.log("child start---");
return (
<div
onClick={() => {
changeName("bobozai");
}}
>
child comps: {name}
</div>
);
};
// 如果不使用useCallback,則點(diǎn)擊父組件計(jì)數(shù)的同時(shí),子組件會(huì)console進(jìn)行渲染,
// 因?yàn)楦耤ount時(shí)父組件會(huì)重新渲染,導(dǎo)致重新生成了一個(gè)changeName函數(shù),
// 所以子組件的props變了,導(dǎo)致子組件會(huì)重新渲染
// 而對(duì)changeName函數(shù)用useCallback進(jìn)行包裹,則對(duì)函數(shù)進(jìn)行緩存不會(huì)重新生成以上就是react組件memo useMemo useCallback使用區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于react組件memo useMemo useCallback的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 關(guān)于react中useCallback的用法
- react中關(guān)于useCallback的用法
- 詳解react中useCallback內(nèi)部是如何實(shí)現(xiàn)的
- React Hooks之使用useCallback和useMemo進(jìn)行性能優(yōu)化方式
- React?useCallback使用方法詳解
- React中memo useCallback useMemo方法作用及使用場(chǎng)景
- 解析React中useMemo與useCallback的區(qū)別
- React?中?memo?useMemo?useCallback?到底該怎么用
- React中useCallback 的基本使用和原理小結(jié)
相關(guān)文章
React?中使用?Redux?的?4?種寫法小結(jié)
這篇文章主要介紹了在?React?中使用?Redux?的?4?種寫法,Redux 一般來說并不是必須的,只有在項(xiàng)目比較復(fù)雜的時(shí)候,比如多個(gè)分散在不同地方的組件使用同一個(gè)狀態(tài),本文就React使用?Redux的相關(guān)知識(shí)給大家介紹的非常詳細(xì),需要的朋友參考下吧2022-06-06
詳解超簡(jiǎn)單的react服務(wù)器渲染(ssr)入坑指南
這篇文章主要介紹了詳解超簡(jiǎn)單的react服務(wù)器渲染(ssr)入坑指南,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-02-02
在?React?Native?中使用?CSS?Modules的配置方法
有些前端工程師希望也能像開發(fā) web 應(yīng)用那樣,使用 CSS Modules 來開發(fā) React Native,本文將介紹如何在 React Native 中使用 CSS Modules,需要的朋友可以參考下2022-08-08
React實(shí)現(xiàn)父子組件有效通信的多種方式
在React中,父子組件之間的通信是一個(gè)重要的概念,它直接影響到數(shù)據(jù)傳遞和組件的交互,了解如何實(shí)現(xiàn)父子組件之間的有效通信,可以幫助你構(gòu)建更高效、可維護(hù)的應(yīng)用,本文將詳細(xì)探討父子組件通信的多種方式,包括屬性傳遞、回調(diào)函數(shù)、上下文API、以及更高級(jí)的狀態(tài)管理解決方案,2025-07-07
React useMemo和useCallback的使用場(chǎng)景
這篇文章主要介紹了React useMemo和useCallback的使用場(chǎng)景,幫助大家更好的理解和學(xué)習(xí)使用React框架,感興趣的朋友可以了解下2021-04-04

