react組件memo useMemo useCallback使用區(qū)別示例
正文
memo用來優(yōu)化函數(shù)組件的重復渲染行為,針對的是一個組件
useMemo返回一個memoized的值
本質(zhì)都是用同樣的算法來判定依賴是否發(fā)生改變,繼而決定是否觸發(fā)memo或者useMemo中的邏輯,利用memo就可以避免不必要的重復計算,減少資源浪費
useCallback返回一個memoized的函數(shù)
useMemo和useCallback都接收兩個參數(shù),第一個參數(shù)為fn,第二個參數(shù)為[],數(shù)組中是變化依賴的參數(shù) memo則可以直接作用于組件,例如
export default memo(Mycomponent)
useMemo和useEffect的執(zhí)行時機是不一致的:useEffect執(zhí)行的是副作用,所以一定是在渲染之后執(zhí)行的,useMemo是需要有返回值的,而返回值可以直接參與渲染的,所以useMemo是在渲染期間完成的
memo使用
// 父組件
const Parent = ()=>{
const [count, setCount] = useState(1)
const addCount = ()=>{
setCount(count + 1)
}
return(
<>
<div onClick={addCount}>計數(shù): {count}</div>
<Child />
</>
)
}
// 子組件
const Child = memo(()=>{
console.log('child start---')
return(
<div>child...</div>
)
})
// 使用memo后,子組件的props或者state沒有變化時,將不會對子組件進行渲染
useMemo使用
const sum = ()=>{
return a+b
}
const result = useMemo(()=>{sum()},[a,b])
// 只有在a或者b的值變化時才會觸發(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}>計數(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,則點擊父組件計數(shù)的同時,子組件會console進行渲染,
// 因為更新count時父組件會重新渲染,導致重新生成了一個changeName函數(shù),
// 所以子組件的props變了,導致子組件會重新渲染
// 而對changeName函數(shù)用useCallback進行包裹,則對函數(shù)進行緩存不會重新生成以上就是react組件memo useMemo useCallback使用區(qū)別的詳細內(nèi)容,更多關于react組件memo useMemo useCallback的資料請關注腳本之家其它相關文章!
- 源碼分析React中useCallback和useMemo
- React中useMemo和useCallback的使用小結(jié)
- React中useMemo、useCallback的具體使用
- 詳解React中的useMemo和useCallback的區(qū)別
- React中useCallback useMemo使用方法快速精通
- React中useCallback useMemo到底該怎么用
- 解析React中useMemo與useCallback的區(qū)別
- react性能優(yōu)化useMemo與useCallback使用對比詳解
- React useMemo和useCallback的使用場景
- React中useMemo 和 useCallback 的區(qū)別小結(jié)
相關文章
React?中使用?react-i18next?國際化的過程(react-i18next?的基本用法)
i18next?是一款強大的國際化框架,react-i18next?是基于?i18next?適用于?React?的框架,本文介紹了?react-i18next?的基本用法,如果更特殊的需求,文章開頭的官方地址可以找到答案2023-01-01
React編程模型之Project Reactor實際應用實例
這篇文章主要介紹了React編程模型之Project Reactor實際應用實例,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2025-05-05
React使用context進行跨級組件數(shù)據(jù)傳遞
這篇文章給大家介紹了React使用context進行跨級組件數(shù)據(jù)傳遞的方法步驟,文中通過代碼示例給大家介紹的非常詳細,對大家學習React context組件數(shù)據(jù)傳遞有一定的幫助,感興趣的小伙伴跟著小編一起來學習吧2024-01-01
react實現(xiàn)同頁面三級跳轉(zhuǎn)路由布局
這篇文章主要為大家詳細介紹了react實現(xiàn)同頁面三級跳轉(zhuǎn)路由布局,一個路由小案例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-09-09
react中useState使用:如何實現(xiàn)在當前表格直接更改數(shù)據(jù)
這篇文章主要介紹了react中useState的使用:如何實現(xiàn)在當前表格直接更改數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08

