react - 初識hoos - useMemo和 useCallback


hooks 中在也不需要this的概念了,并且必須放到函數(shù)組件內(nèi)部最外層 最上面

引入?useMemo 和?useCallback

import?React,?{?useMemo,?useCallback }?from?"react";

useMemo

先看一個例子:

useMemo(()?=>?{

????return?count;

??},[count]);

?useMemo(params) 設(shè)置 第一個參數(shù)是函數(shù)

count是第二個參數(shù) 是 追蹤變化的值

正常情況下 只要在當(dāng)前組件組件 數(shù)據(jù)狀態(tài)發(fā)生變化 當(dāng)前的內(nèi)部所有的邏輯 都會重新計算 并且 render一遍

比如:

const?[value,setValue]?=?useState(''");

const?[value2,setValue2]?=?useState(''");

const?handleChange = (e) => {

setValue(e.target.value)

}

const?c= () => {

return 456;

}

<div>{c()} </div>

<input?type="text"?value={value}?onChange={(e)?=>?handleChange(e)}?/>

<button onClick={() => setValue2(math.random())}></button>

一般setValue和setValue2? 只要有一方點擊 c函數(shù) 都會執(zhí)行

這樣就浪費了性能 我們只想在input值改變的時候 執(zhí)行c函數(shù) 所以我們可以使用useMemo

?hook

const?[value,setValue]?=?useState(''");

const?[value2,setValue2]?=?useState(''");

const?handleChange?= (e) => {

setValue(e.target.value)

}

const?c= useMemo (() => {

return 456;

},[value])

<div>{c()} </div>?

<input type="text" value={value} onChange={(e) => handleChange(e)} />

?<button onClick={() => setValue2(math.random())}></button>

這樣 是有value值改變的時候 才會執(zhí)行 c函數(shù)


useCallback

useMemo和useCallback 唯一區(qū)別是

useMemo 是 內(nèi)部返回的是一個值

useCallback?是 內(nèi)部返回的是一個當(dāng)前函數(shù)

例如:

useMemo(() => {

return '2'

})


useMemo 返回的是 2;

useCallback 返回的是?() => {

return '2'

}


所以一般時候?useCallback 可以當(dāng)做是class組件的shouldComponentUpdate

以下是我的demo

父組件

子組件


父組件





有寫錯的地方,歡迎指正,不勝感激!

筆者QQ群:148042812

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奕谭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子痴荐,更是在濱河造成了極大的恐慌血柳,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件生兆,死亡現(xiàn)場離奇詭異难捌,居然都是意外死亡,警方通過查閱死者的電腦和手機鸦难,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門根吁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人合蔽,你說我怎么就攤上這事击敌。” “怎么了拴事?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵沃斤,是天一觀的道長。 經(jīng)常有香客問我挤聘,道長轰枝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任组去,我火速辦了婚禮,結(jié)果婚禮上步淹,老公的妹妹穿的比我還像新娘从隆。我一直安慰自己诚撵,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布键闺。 她就那樣靜靜地躺著寿烟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辛燥。 梳的紋絲不亂的頭發(fā)上筛武,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音挎塌,去河邊找鬼徘六。 笑死,一個胖子當(dāng)著我的面吹牛榴都,可吹牛的內(nèi)容都是我干的待锈。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼嘴高,長吁一口氣:“原來是場噩夢啊……” “哼竿音!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拴驮,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤春瞬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后套啤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體快鱼,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年纲岭,在試婚紗的時候發(fā)現(xiàn)自己被綠了抹竹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡止潮,死狀恐怖窃判,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情喇闸,我是刑警寧澤袄琳,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站燃乍,受9級特大地震影響唆樊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜刻蟹,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一逗旁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舆瘪,春花似錦片效、人聲如沸红伦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昙读。三九已至,卻和暖如春膨桥,著一層夾襖步出監(jiān)牢的瞬間蛮浑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工只嚣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沮稚,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓介牙,卻偏偏與公主長得像壮虫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子环础,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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

  • Hook 是 React 16.8 的新增特性囚似。它可以讓你在不編寫 class 的情況下使用 state 以及其他...
    孤獨的小色狼閱讀 363評論 0 0
  • React 生命周期很多人都了解,但通常我們所了解的都是單個組件的生命周期线得,但針對Hooks 組件饶唤、多個關(guān)聯(lián)組件(...
    前端js閱讀 6,996評論 3 7
  • 長久以來,面向?qū)ο笤?JavaScript 編程范式中占據(jù)著主導(dǎo)地位贯钩。不過募狂,最近人們對函數(shù)式編程的興趣正在增長。函...
    神刀閱讀 456評論 0 0
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,028評論 0 2
  • Hooks是 React v16.8 的新特性角雷,可以在不使用類組件的情況下祸穷,使用 state 以及其他的React...
    hellomyshadow閱讀 13,420評論 0 5