React Hooks 系列 之 useCallback

React Hooks 系列 之 useCallback

介紹

useCallback 是 React Hooks 中的一個(gè)重要成員介却,它允許我們?cè)诙啻武秩局芯彺婧瘮?shù)叔营。簡(jiǎn)單來(lái)說(shuō)愕鼓,它可以幫助我們避免因?yàn)楹瘮?shù)的重新創(chuàng)建而導(dǎo)致的不必要的重新渲染代态。

const cachedFn = useCallback(fn, dependencies);

用法

1、跳過組件的重新渲染

當(dāng)你優(yōu)化渲染性能的時(shí)候惩淳,有時(shí)需要緩存?zhèn)鬟f給子組件的函數(shù)蕉毯。例如,當(dāng)你傳遞一個(gè)函數(shù)給一個(gè)被 memo 包裹的子組件時(shí)黎泣,useCallback 可以確保函數(shù)在多次渲染中保持不變恕刘,除非它的依賴發(fā)生改變。

::: details demo 代碼 <<< @/components/react/hooks/memo/FunctionInProps4.jsx :::

在上面的案例中抒倚,只有當(dāng)依賴列表中的值發(fā)生變化時(shí)褐着,getText 函數(shù)才會(huì)被重新創(chuàng)建。

2托呕、優(yōu)化自定義 Hook

當(dāng)你創(chuàng)建自定義Hook時(shí)含蓉,建議將返回的任何函數(shù)都包裹在useCallback中。這確保了Hook的使用者在需要時(shí)能夠優(yōu)化自己的代碼项郊。

::: details demo 代碼 <<< @/components/react/hooks/useCallback/useCounter.jsx :::

調(diào)用 useCallback 后大致執(zhí)行情況

graph TD
    A1[調(diào)用useCallback]
    B1[創(chuàng)建/獲取當(dāng)前組件的Fiber節(jié)點(diǎn)]
    C1[檢查Fiber節(jié)點(diǎn)上的hooks鏈表-每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)hook]
    D1[是否存在對(duì)應(yīng)的hook對(duì)象?]
    E1[創(chuàng)建新的hook對(duì)象并存儲(chǔ)函數(shù)]
    F1[檢查hook對(duì)象的memoizedState屬性]
    G1[依賴項(xiàng)是否改變?]
    H1[從memoizedState獲取函數(shù)]
    I1[存儲(chǔ)新的函數(shù)]
    J1[更新memoizedState屬性]
    K1[返回memoized函數(shù)]

    A1 --> B1
    B1 --> C1
    C1 --> D1
    D1 -- No --> E1
    D1 -- Yes --> F1
    E1 --> F1
    F1 --> G1
    G1 -- No --> H1 --> K1
    G1 -- Yes --> I1 --> J1 --> K1
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末馅扣,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子着降,更是在濱河造成了極大的恐慌差油,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件任洞,死亡現(xiàn)場(chǎng)離奇詭異蓄喇,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)交掏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門妆偏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人盅弛,你說(shuō)我怎么就攤上這事钱骂。” “怎么了挪鹏?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵见秽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我讨盒,道長(zhǎng)解取,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任催植,我火速辦了婚禮肮蛹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘创南。我一直安慰自己伦忠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布稿辙。 她就那樣靜靜地躺著昆码,像睡著了一般。 火紅的嫁衣襯著肌膚如雪邻储。 梳的紋絲不亂的頭發(fā)上赋咽,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音吨娜,去河邊找鬼脓匿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛宦赠,可吹牛的內(nèi)容都是我干的陪毡。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼勾扭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼毡琉!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起妙色,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤桅滋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后身辨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丐谋,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年栅表,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了笋鄙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怪瓶,死狀恐怖萧落,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情洗贰,我是刑警寧澤找岖,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站敛滋,受9級(jí)特大地震影響许布,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绎晃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一蜜唾、第九天 我趴在偏房一處隱蔽的房頂上張望杂曲。 院中可真熱鬧,春花似錦袁余、人聲如沸擎勘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)棚饵。三九已至,卻和暖如春掩完,著一層夾襖步出監(jiān)牢的瞬間噪漾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工且蓬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留欣硼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓缅疟,卻偏偏與公主長(zhǎng)得像分别,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子存淫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容