react組件memo useMemo useCallback使用區(qū)別示例
正文
memo用來優(yōu)化函數(shù)組件的重復(fù)渲染行為,針對的是一個組件
useMemo返回一個memoized的值
本質(zhì)都是用同樣的算法來判定依賴是否發(fā)生改變,繼而決定是否觸發(fā)memo或者useMemo中的邏輯,利用memo就可以避免不必要的重復(fù)計算,減少資源浪費
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時父組件會重新渲染,導(dǎo)致重新生成了一個changeName函數(shù), // 所以子組件的props變了,導(dǎo)致子組件會重新渲染 // 而對changeName函數(shù)用useCallback進行包裹,則對函數(shù)進行緩存不會重新生成
以上就是react組件memo useMemo useCallback使用區(qū)別的詳細內(nèi)容,更多關(guān)于react組件memo useMemo useCallback的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
如何在React?Native開發(fā)中防止滑動過程中的誤觸
在使用React?Native開發(fā)的時,當(dāng)我們快速滑動應(yīng)用的時候,可能會出現(xiàn)誤觸,導(dǎo)致我們會點擊到頁面中的某一些點擊事件,誤觸導(dǎo)致頁面元素響應(yīng)從而進行其他操作,表現(xiàn)出非常不好的用戶體驗。2023-05-05react項目打包后點擊index.html頁面出現(xiàn)空白的問題
這篇文章主要介紹了react項目打包后點擊index.html頁面出現(xiàn)空白的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06JS中使用react-tooltip插件實現(xiàn)鼠標(biāo)懸浮顯示框
前段時間遇到的一個需求,要求鼠標(biāo)懸停顯示使用描述, 用到了react-tooltip插件,今天寫一個總結(jié),感興趣的朋友跟隨小編一起看看吧2019-05-05ReactNative實現(xiàn)圖片上傳功能的示例代碼
本篇文章主要介紹了ReactNative實現(xiàn)圖片上傳功能的示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-07-07