1. 程式人生 > 其它 >react擴充套件 三個常用的hook

react擴充套件 三個常用的hook

1.setstate兩種方式

1.1 物件式state setstate(stateChange,[callback])stateChange是一個物件,物件裡面可以修改state裡面有的屬性值,callback可以拿到修改過後的值進行操作,callback是可選的回撥函式,它在狀態更新完畢、介面也更新後(render呼叫後)才被呼叫

1.2 函式式state setstate(updateState,[callback]),updateState是一個函式,會將此時的state和props傳進來,callback的作用如上,如果此時需要修改的state依賴之前的state,可以用函式式state

使用原則: (1).如果新狀態不依賴於原狀態===>使用物件方式 (2).如果新狀態依賴於原狀態===>使用函式方式 (3).如果需要在setState()執行後獲取最新的狀態資料, 要在第二個callback函式中讀取

1. React Hook/Hooks是什麼?(1). Hook是React 16.8.0版本增加的新特性/新語法(2). 可以讓你在函式元件中使用 state 以及其他的 React 特性

state hook React.useState

let [xxx,setxxx]=usestate(初始值)

(1). State Hook讓函式元件也可以有state狀態, 並進行狀態資料的讀寫操作
(2). 語法: const [xxx, setXxx] = React.useState(initValue)  
(3). useState()說明:
        引數: 第一次初始化指定的值在內部作快取(
隨著對狀態的更改,demo呼叫1+n次,初次算一次,後續呼叫n次,第一次呼叫react底層存下xxx的初始值,後面n次呼叫,useState不會對xxx的值進行覆蓋處理

返回值: 包含2個元素的陣列, 第1個為內部當前狀態值, 第2個為更新狀態值的函式 (4). setXxx()2種寫法: setXxx(newValue): 引數為非函式值, 直接指定新的狀態值, 內部用其覆蓋原來的狀態值 setXxx(value => newValue): 引數為函式, 接收原本的狀態值, 返回新的狀態值, 內部用其覆蓋原來的狀態值
Effect hook React.useEffect(可以實現生命週期的作用,掛載以後,更新以後都在執行)

(1). Effect Hook 可以讓你在函式元件中執行副作用操作(用於模擬類元件中的生命週期鉤子)
(2). React中的副作用操作:
        發ajax請求資料獲取
        設定訂閱 / 啟動定時器
        手動更改真實DOM
(3). 語法和說明: 
        useEffect(() => { 
          // 在此可以執行任何帶副作用操作
          return () => { // 在元件解除安裝前執行
            // 在此做一些收尾工作, 比如清除定時器/取消訂閱等
          }
        }, [stateValue]) // 如果指定的是[], 回撥函式只會在第一次render()後執行,空陣列代表誰也不監測,只在第一次掛載的時候執行,
其餘時候stateValue有改變就會執行,不寫第二個引數代表都監測,監測所有,只要有改變就監測 (4). 可以把 useEffect Hook 看做如下三個函式的組合 componentDidMount()(第二個引數為[]) componentDidUpdate()(第二個引數為一個有state的[]) componentWillUnmount() (useEffect的第一個引數是一個函式,這個函式返回的函式就相當於
componentWillUnmount())
Ref hook React.useRef(類似React.createRef(),也是一對一,專用)
(1). Ref Hook可以在函式元件中儲存/查詢元件內的標籤或任意其它資料
(2). 語法: const refContainer = useRef()
(3). 作用:儲存標籤物件,功能與React.createRef()一樣
是一個容器,定義容器,然後再標籤裡面用ref繫結,使用的時候是一樣的1,除了函式元件沒有自己的this