什麼是hook?聊聊React中常用的兩個Hook

2022-03-18 13:00:30
本篇文章帶大家瞭解一下hook,聊聊為什麼推薦使用hook進行開發,並介紹一下React最常用的兩個Hook,希望對大家有所幫助!

先介紹一下什麼是hook

Hook是React 16.8新增的特性,專門用在函數式元件,它可以代替class元件中react的其他特性,是實際工作中要常用到的。【相關推薦:Redis視訊教學

為什麼推薦使用hook進行開發

hook是專門配合函數式元件開發使用的,可以用它代替class元件的一些生命週期,避免大量this引起的混亂,因此hook便於開發,且更易於讓開發者理解程式碼

以上是個人的簡單總結,更多原因可以參考react官網:

https://react.docschina.org/docs/hooks-intro.html#motivation

useState

程式碼中:

React.useState(0)相當於class元件中的this.state新增一個屬性值

variable相當於class元件中的this.state. variable的值

setVariable可以用來修改variable的值,可以相當於class元件中的this.setState

import React,(useState) from 'react'
export default function useState_Demo() {
    const [variable, setVariable] = useState(0);//通過解構賦值,我們拿到的variable、setVariable
    function changeVariable(){
        setVariable((variable) => variable +1) //setVariable的回撥中傳進來的引數是variable
    }
    render (
        <div> 
            <button onclick = {change}>點我會使variable+1</button>
        </div>
    )
}

useEffect

程式碼中:

以下程式碼中可以看出,useEffect的使用代替了在class元件中componentDidMoun、componentDidUpdate、componentWillUnmount的使用

import React,(useState, useEffect) from 'react'
export default function useState_Demo() {
   const [variable, setVariable] = useState(0);//通過解構賦值,我們拿到的variable、setVariable
    
    useEffect(() => {
        //這個return是在該元件監測的資料變化時或者被解除安裝時呼叫的,被解除安裝時呼叫可以相當於componentWillUnmount勾點 
        return () => {
            console.log('該元件被解除安裝了')
        }
    }, [variable])//第二個引數傳了[variable],表示檢測variable的更新變化,一旦variable變化就會再次執行useEffect的回撥
                  //第二個引數傳了[],表示誰都不檢測只執行一次useEffect的回撥,相當於componentDidMount勾點
                  //第二個引數不傳參,只要該元件有state變化就會執行useEffect的回撥,相當於componentDidUpdate勾點
    function changeVariable(){
        setVariable((variable) => variable +1) //setVariable的回撥中傳進來的引數是variable
    }
    render (
        <div> 
            <button onclick = {change}>點我會使variable+1</button>
        </div>
    )
}

使用hook需要注意的

1、只在元件函數的最外層使用Hook,不要在迴圈,條件或巢狀函數中呼叫 Hook

import React,(useEffect) from 'react'
export default function useState_Demo() {
   //這裡才是正確的
   useEffect(() => {})
    
   //錯誤1,使用了條件判斷
   if(true) {
        useEffect(() => {})
   }
   //錯誤2,使用了迴圈
   while(true) {
        useEffect(() => {})
   }
  //錯誤3,使用了巢狀
  useEffect(() => {
      useEffect(() => {})
  })
}

2、不能在元件的函數外使用Hook

import React,(useState, useEffect) from 'react'
//錯誤1,在元件函數外使用了useState
const [variable, setVariable] = useState(0);
//錯誤2,在元件函數外使用了useEffect
useEffect(() => {})
export default function useState_Demo() {
   //在元件函數裡使用才是正確的
   const [variable, setVariable] = useState(0);
}

3、為了避免以上的錯誤,可以 安裝eslint-plugin-react-hooks ESLint 外掛來檢查程式碼上錯誤

自定義hook

hook就是一個函數,自定義hook是為了方便元件之間共用邏輯,其實就是對複用功能進行封裝,自定義hook內部也呼叫了react自帶的hook,命名要以use開頭

//自定義hook
function useHook(initState) {
  const [variable, setVariable] = useState(initState)
  return variable;
}
//使用自定義hook
export default function useState_Demo() {
    const variableState = useHook(0)
}

可能你會疑惑,多個元件中使用相同的 Hook 會共用 state 嗎?

答案是:不會。因為每次呼叫react自帶的hook都是獨自互不影響的,所以自定義hook被多次重複呼叫也是獨自互不影響的

更多程式設計相關知識,請存取:!!

以上就是什麼是hook?聊聊React中常用的兩個Hook的詳細內容,更多請關注TW511.COM其它相關文章!