2021-05-18 react hooks 學習

Hook 是 React 16.8 的新增特性嚼沿,它可以讓我們在不編寫class的情況下使用state以及其他的React特性(比如生命周期)
1.什么情況下使用Hooks

官方并不建議我們把原有的 class 組件汰翠,大規(guī)模重構成 Hooks驹碍,而是有一個漸進過程:
首先县貌,原有的函數組件如果需要自己的狀態(tài)或者需要訪問生命周期函數,那么用 Hooks 是再好不過了紊馏;
另外就是硬贯,我們可以先在一些邏輯較簡單的組件上嘗試 Hooks ,在使用起來相對較熟悉掸驱,且組內人員比較能接受的前提下肛搬,再擴大 Hooks 的使用范圍。

2.對比與class毕贼,函數式組件有哪些優(yōu)勢

State Hook 使得組件內的狀態(tài)的設置和更新相對獨立温赔,這樣便于對這些狀態(tài)單獨測試并復用。
Hook 將組件中相互關聯(lián)的部分拆分成更小的函數(比如設置訂閱或請求數據)帅刀,而并非強制按照生命周期劃分让腹,這樣使得各個邏輯相對獨立和清晰

3.hooks 提供的常用的幾個函數
(1) useState

useState來自react,需要從react中導入扣溺,它是一個hook
useState 只在初始化時執(zhí)行一次骇窍,后面不再執(zhí)行
u? 參數:初始化值,如果不設置為undefined;  返回值:數組锥余,包含兩個元素;
? 元素一:當前狀態(tài)的值(第一調用為初始化值); 類比于 state中的值
? 元素二:設置狀態(tài)值的函數;類比于 setState 更新界面
如下代碼
const [counter,setCount] = useState(0)  //數組的結構
    return (
        <div>
            <h2>當前計數 {counter}</h2>
            <button onClick={e => setCount( counter + 1 )}>+1</button>
            <button onClick={e => setCount( counter - 1 )}>-1</button>

        </div>
    );

(2)useEffect

useEffect 相當于是 componentDidMount腹纳,componentDidUpdate 和 componentWillUnmount 這三個函數的組合,可以通過傳參及其他邏輯驱犹,分別模擬這三個生命周期函數嘲恍;
useEffect 第二個參數是一個數組,如果數組為空時雄驹,則只執(zhí)行一次(相當于componentDidMount)
如果數組中有值時佃牛,則該值更新時,useEffect 中的函數才會執(zhí)行 (相當于componentDidUpdate)
如果沒有第二個參數医舆,則每次render時俘侠,useEffect 中的函數都會執(zhí)行;
effect 中返回的函數(其清除函數)(頁面銷毀的時候調用)蔬将, (相當于componentWillUnmount)
如下代碼
const  [counter,setCounter] = useState(0)
const  [age,setAge] = useState(18)
  useEffect(()=>{
        document.title = counter
        console.log('1')
        return ()=>{
            console.log('2')
        }
    },[counter])

    useEffect(()=>{
        console.log('3')
    })

    useEffect(()=>{
        console.log('4')
    },[counter,age])

    useEffect(()=>{
        console.log('5')
    },[])

    return (
        <div>
            <h2>當前計數:{counter}</h2>
            <button onClick={e=>{setCounter(counter+1)}}>+1</button>
            <button onClick={e=>{setAge(age+1)}}>+1</button>
        </div>
    );

(3) useContex

useContext() 狀態(tài)共享的函數鉤子 
該鉤子的作用是爷速,在組件之間共享狀態(tài)。關于Context這里不再贅述霞怀,其作用就是可以做狀態(tài)的分發(fā)惫东,在React16.X以后支持,避免了react逐層通過Props傳遞數據毙石。

import React, {useState, useContext} from 'react';

function Test1() {
    // hook : useState
    // useState 本身是一個函數廉沮,來自react包
    // const arr = useState(0)
    // const state = arr[0]
    // const setState = arr[1]

    const [counter, setCount] = useState(0)
    const AppContext = React.createContext({})

    const A = () => {
        const {name} = useContext(AppContext)
        return (
            <p>我是A組件的名字{name}</p>
        )
    }

    const B = () => {
        const {name} = useContext(AppContext)
        return (
            <p>我是B組件的名字{name}</p>
        )
    }

    return (
        <AppContext.Provider value={{name: 'hook測試'}}>
            <h2>當前計數 {counter}</h2>
            <button onClick={e => setCount(counter + 1)}>+1</button>
            <button onClick={e => setCount(counter - 1)}>-1</button>
            <A></A>
            <B></B>

        </AppContext.Provider>
    );
}

export default Test1;

image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市徐矩,隨后出現的幾起案子废封,更是在濱河造成了極大的恐慌,老刑警劉巖丧蘸,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡力喷,警方通過查閱死者的電腦和手機刽漂,發(fā)現死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弟孟,“玉大人贝咙,你說我怎么就攤上這事》髂迹” “怎么了庭猩?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長陈症。 經常有香客問我蔼水,道長,這世上最難降的妖魔是什么录肯? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任趴腋,我火速辦了婚禮,結果婚禮上论咏,老公的妹妹穿的比我還像新娘优炬。我一直安慰自己,他們只是感情好厅贪,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布蠢护。 她就那樣靜靜地躺著,像睡著了一般养涮。 火紅的嫁衣襯著肌膚如雪葵硕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天单寂,我揣著相機與錄音贬芥,去河邊找鬼。 笑死宣决,一個胖子當著我的面吹牛蘸劈,可吹牛的內容都是我干的。 我是一名探鬼主播尊沸,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼威沫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了洼专?” 一聲冷哼從身側響起棒掠,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屁商,沒想到半個月后烟很,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年雾袱,在試婚紗的時候發(fā)現自己被綠了恤筛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡芹橡,死狀恐怖毒坛,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情林说,我是刑警寧澤煎殷,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站腿箩,受9級特大地震影響豪直,放射性物質發(fā)生泄漏。R本人自食惡果不足惜度秘,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一顶伞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧剑梳,春花似錦唆貌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至追逮,卻和暖如春酪刀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钮孵。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工骂倘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人巴席。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓历涝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親漾唉。 傳聞我的和親對象是個殘疾皇子荧库,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內容

  • React-Hooks 1. React-hooks是什么 我們先來看一下官網的解釋: Hook 是 React ...
    Linyqs閱讀 902評論 0 0
  • 前言 最近的換寫React項目了,好久沒有寫React赵刑,還動不動就想class??分衫,現在跟上時代,重新學習React...
    alex夏夜閱讀 2,305評論 1 3
  • React Hooks Hook 是 16.8新增特性般此。 hooks 優(yōu)勢 能優(yōu)化類組件的三大問題 能在無需修改組...
    Vincent_cy閱讀 679評論 0 0
  • 前言 本文全面介紹了React Hooks的所有API概念蚪战、用法牵现、豐富的demo以及部分底層原理。 實際上邀桑,Rea...
    南宮__閱讀 3,577評論 0 6
  • Hook 是 React 16.8 的新增特性施籍。它可以讓你在不編寫 class 的情況下使用 state 以及其他...
    mora__閱讀 585評論 0 0