您好,登錄后才能下訂單哦!
這篇文章主要介紹“React中useMemo與useCallback的區(qū)別是什么”,在日常操作中,相信很多人在React中useMemo與useCallback的區(qū)別是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”React中useMemo與useCallback的區(qū)別是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
把“創(chuàng)建”函數(shù)和依賴項數(shù)組作為參數(shù)傳?入useMemo,它僅會在某個依賴項改變時才重新計算memoized 值。這種優(yōu)化有助于避免在每次渲染時都進?行行?高開銷的計算。
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變化,這?里里才重新執(zhí)?行行 }, [count]); const [value, setValue] =useState(""); return (<div><h4>UseMemoPage</h4> <p>expensive:{expensive}</p><p>{count}</p> <button onClick={() =>setCount(count+1)}>add</button> <input value={value} onChange={event=>setValue(event.target.value)} /></div> ); }
把內(nèi)聯(lián)回調(diào)函數(shù)及依賴項數(shù)組作為參數(shù)傳?入useCallback,它將返回該回調(diào)函數(shù)的 memoized 版本,該回調(diào)函數(shù)僅在某個依賴項改變時才會更更新。當(dāng)你把回調(diào)函數(shù)傳遞給經(jīng)過優(yōu)化的并使?用引?用相等性去避免?非必要渲染(例例如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><h4>UseCallbackPage</h4> <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><h4>Child</h4> <buttononClick={() =>console.log(addClick())}>add</button></div> ) } }
useCallback(fn, deps)相當(dāng)于useMemo(() => fn, deps)。
注意依賴項數(shù)組不不會作為參數(shù)傳給“創(chuàng)建”函數(shù)。雖然從概念上來說它表現(xiàn)為:所有“創(chuàng)建”函數(shù)中引?用的值都應(yīng)該出現(xiàn)在依賴項數(shù)組中。未來編譯器?會更更加智能,屆時?自動創(chuàng)建數(shù)組將成為可能。
補充介紹React的memo與useMemo及useCallback
概念解析
將組件在相同的情況下的渲染結(jié)果,緩存渲染結(jié)果
當(dāng)組件傳入props
相同的參數(shù)時,淺對比之后有之前的傳入項,則復(fù)用緩存最近一次結(jié)果
數(shù)據(jù)對比,只做淺對比。如果需要控制對比過程,需要自己寫自定義比對函數(shù)。傳參數(shù)置第二個參數(shù) -請注意不要與 shouldComponetUpdate
返回值混合
React.PureComponent
shouldComponentUpdate
概念解析
函數(shù)組件的緩存渲染結(jié)果
可以將當(dāng)前的組件節(jié)點顆?;?/p>
通過第二個參數(shù)去判斷,是否更新useMemo的回調(diào)函數(shù)
回調(diào)函數(shù)是一個必包,如果創(chuàng)建使用了 useState
,會緩存 state 值,不會拿到實時更新的值
概念解析
當(dāng)父級組件傳遞給子級組件一個函數(shù)時,無狀態(tài)組件每次都會重新生成新的props函數(shù),導(dǎo)致子組件刷新
返回一個需要緩存的函數(shù)
傳遞需要更新的依賴項,一般回調(diào)函數(shù)內(nèi)部使用的數(shù)據(jù),都需要添加在依賴項中
避免父子之間,子級生成新的props函數(shù),從而刷新子組件
一般聯(lián)合useMemo一起使用
到此,關(guān)于“React中useMemo與useCallback的區(qū)別是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。