Class Component or React Hooks灾螃?

這篇文章我將帶著大家去初步了解下React hooks的一些知識题翻。
我們會從以下三個方面去了解、介紹React hooks腰鬼。

  • 是什么藐握?
  • 為什么?
  • 怎么做垃喊?

什么是Hooks?

總結(jié)起來就是hooks提供了在react函數(shù)組件中也可以使用類組件的state和生命周期的能力猾普。

為什么要用Hooks?

組件嵌套問題

之前如果我們需要抽離一些重復的邏輯,就會選擇 HOC 或者 render props 的方式本谜。但是通過這樣的方式去實現(xiàn)組件初家,你打開 React DevTools 就會發(fā)現(xiàn)組件被各種其他組件包裹在里面。這種方式首先提高了 debug 的難度,并且也很難實現(xiàn)共享狀態(tài)溜在。

但是通過 Hooks 的方式去抽離重復邏輯的話陌知,一是不會增加組件的嵌套,二是可以實現(xiàn)狀態(tài)的共享掖肋。

Class組件的問題

如果我們需要一個管理狀態(tài)的組件仆葡,那么就必須使用 class 的方式去創(chuàng)建一個組件。但是一旦 class 組件變得復雜志笼,那么四散的代碼就很不容易維護沿盅。另外 class 組件通過 Babel 編譯出來的代碼也相比函數(shù)組件多得多。

Hooks 能夠讓我們通過函數(shù)組件的方式去管理狀態(tài)纫溃,并且也能將四散的業(yè)務邏輯寫成一個個 Hooks 便于復用以及維護腰涧。

怎么使用Hooks?

首先放兩張Class Component 和React hooks兩種不同方式的代碼截圖。


Class Component

hooks

useState

useState 是其中最常有的鉤子紊浩,可以為我們的函數(shù)組件提供local state窖铡,它接受一個初始state的值,返回一對變量坊谁。

   const [count, setCount] = useState(0); // 0為state的初始值

setCount 用法是和 setState 一樣的费彼,可以傳入一個新的狀態(tài)或者函數(shù)。

setCount(prevCount => prevCount + 1)

useEffect

useEffect 即為生命周期的鉤子口芍。useEffect 可以讓你在函數(shù)組件中執(zhí)行副作用操作箍铲,相當于ComponentWiillMount、ComponentDidMount阶界、ComponentWillUnmount三個生命周期的結(jié)合。有些副作用操作需要清除聋庵,所以需要返回一個函數(shù)膘融。

Effect Hook

useEffect 中還可以通過傳入第二個參數(shù)來決定是否執(zhí)行里面的操作來避免一些不必要的性能損失,只要第二個參數(shù)數(shù)組中的成員的值沒有改變祭玉,就會跳過此次執(zhí)行氧映。如果傳入一個空數(shù)組 [ ],那么該 effect 只會在組件 mount 和 unmount 時期執(zhí)行脱货。

useEffect(() => {
  document.title = `You clicked ${count} times`;
}, [count]); // 如果count沒有改變岛都,就跳過此次執(zhí)行

清除副作用操作可以在返回的函數(shù)中去進行。它會在前一次 effect執(zhí)行后振峻,下一次 effect 將要執(zhí)行前臼疫,以及 Unmount 時期執(zhí)行。

useRef

useRef 可以讓我們?nèi)ツ玫阶钚碌膕tate扣孟。

const [count, setCount] = React.useState(0)
const ref = React.useRef(count)
    
React.useEffect(() => {
    ref.current = count
    setTimeout(() => {
        console.log(ref.current) // 這里可以拿到更新后的state
    }, 2000)
})

useRef 可以用來存儲任何會改變的值烫堤,解決了在函數(shù)組件上不能通過實例去存儲數(shù)據(jù)的問題。另外你還可以 useRef 來訪問到改變之前的數(shù)據(jù)。

總結(jié)

  • useState:傳入我們所需的初始狀態(tài)鸽斟,返回一個常量狀態(tài)以及改變狀態(tài)的函數(shù)
  • useEffect:第一個參數(shù)接受一個 callback拔创,每次組件更新都會執(zhí)行這個 callback,并且 callback 可以返回一個函數(shù)富蓄,該函數(shù)會在每次組件銷毀前執(zhí)行剩燥。如果 useEffect 內(nèi)部有依賴外部的屬性,并且希望依賴屬性不改變就不重復執(zhí)行 useEffect 的話立倍,可以傳入一個依賴數(shù)組作為第二個參數(shù)
  • useRef:如果你需要有一個地方來存儲變化的數(shù)據(jù)

更多的一些鉤子大家可以去查詢React相關文檔去翻閱學習灭红。附上文檔地址

React hooks為我們提供了react函數(shù)組件的一些擴展能力帐萎,分析了一些React hooks解決的問題以及簡單的使用比伏,我們完全可以使用React hooks去代替類組件,盡情擁抱React hooks疆导。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赁项,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子澈段,更是在濱河造成了極大的恐慌悠菜,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件败富,死亡現(xiàn)場離奇詭異悔醋,居然都是意外死亡,警方通過查閱死者的電腦和手機兽叮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門芬骄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鹦聪,你說我怎么就攤上這事账阻。” “怎么了泽本?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵淘太,是天一觀的道長。 經(jīng)常有香客問我规丽,道長蒲牧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任赌莺,我火速辦了婚禮冰抢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘艘狭。我一直安慰自己晒屎,他們只是感情好喘蟆,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鼓鲁,像睡著了一般蕴轨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上骇吭,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天橙弱,我揣著相機與錄音,去河邊找鬼燥狰。 笑死棘脐,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的龙致。 我是一名探鬼主播蛀缝,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼目代!你這毒婦竟也來了屈梁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤榛了,失蹤者是張志新(化名)和其女友劉穎在讶,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霜大,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡构哺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了战坤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片曙强。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖途茫,靈堂內(nèi)的尸體忽然破棺而出碟嘴,到底是詐尸還是另有隱情,我是刑警寧澤慈省,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布臀防,位于F島的核電站眠菇,受9級特大地震影響边败,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捎废,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一笑窜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧登疗,春花似錦排截、人聲如沸嫌蚤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脱吱。三九已至,卻和暖如春认罩,著一層夾襖步出監(jiān)牢的瞬間箱蝠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工垦垂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宦搬,地道東北人。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓劫拗,卻偏偏與公主長得像间校,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子页慷,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

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