React中的useEffect四種用法分享

目錄 什么是 useEffect ? 1 : useEffect 中 觸發(fā)更新 2 : 用法2 重復的 useEffect 3 :依賴值觸發(fā)回調 4 :useEffect 的返回值 結束啦 什么是 useEffect ? 官方解釋 : useEffect 是一個 React Hook,它允許
目錄
  • 什么是 useEffect ?
    • 1 : useEffect 中 觸發(fā)更新
    • 2 : 用法2 重復的 useEffect
    • 3 :依賴值觸發(fā)回調
    • 4 :useEffect 的返回值
  • 結束啦

    什么是 useEffect ?

    官方解釋 : useEffect 是一個 React Hook,它允許你將組件與外部系統同步。

    什么意思 ? 個人理解就是 它能根據不同的依賴值或者返回值,在不同的時機進行執(zhí)行。

    我們先來說說 第一種用法

    1 : useEffect 中 觸發(fā)更新

    示例1 : 當我們在組件創(chuàng)建的過程,自動執(zhí)行某些操作的時候 , 那我們可以在函數式組件中這樣

    錯誤示例

    import { useEffect } from 'react'
    function App () {
    const [ count , setCount] = useState(0)
    useEffect(()=> {
        initData()
    })
    const initData = () => {
        setCount(count + 1)
    }
    return ( <div> {count} </div> )
    }

    如果你這種用 useEffect 你會發(fā)現 什么問題 ?

    當我們組件 渲染完成去執(zhí)行 useEffect 調用 initData 函數 函數通過 setCount 設置值觸發(fā)更新,一旦更新 useEffect 又會在渲染的最后執(zhí)行,這樣就照成了 死循環(huán)

    所以 你應該這樣寫 ,傳入 useEffect 第二個參數 空數組,代表組件渲染過程中只執(zhí)行一次

    正確示例

    import { useEffect } from 'react'
    function App () {
    const [ count , setCount] = useState(0)
    useEffect(()=> {
        initData()
    }, [])
    const initData = () => {
    setCount(count + 1)
    }
    return ( <div> {count} </div> )
    }

    2 : 用法2 重復的 useEffect

    示例2 : 當我們在組件渲染的過程中 ,如果你寫了多個useEffect 它會怎么做 ?

    import { useEffect, useState } from 'react';
    function Effect() {
      const [count, setCount] = useState(0)
      useEffect(() => {
        console.log('111');
      })
      useEffect(() => {
        console.log('222');
      })
      return (<div> {count} </div>)
    }
    export default Effect

    想當然 , 它不會覆蓋前面的 useEffect ,會根據你的 編寫順序進行收集,然后循環(huán)執(zhí)行(當然這只是我的猜測,暫時還沒看react源碼)

    3 :依賴值觸發(fā)回調

    當你想去依賴某些變量的時候去觸發(fā)回調函數,你可以這樣。

    import { useEffect, useState } from 'react';
    function Effect() {
      const [count, setCount] = useState(0)
      useEffect(() => {
        console.log('count發(fā)生了變化最新值為' + count);
      }, [count])
      return (<div>
        <div>
          {count}
        </div>
        <button onClick={() => setCount(count + 1)}>加1</button>
      </div>)
    }
    export default Effect

    當你的第二個參數是數組,并且是依賴項,組件初次渲染也會執(zhí)行,這是為什么呢 ?

    解答 : 如果從 react useState Hook 來說,也就是 react 將你傳入的 默認值 給你重新賦值了,所以發(fā)生了變化,因此 useEffect 發(fā)生了更新

    4 :useEffect 的返回值

    當useEffect 傳入的 回調函數有返回值時并且為一個 函數的時候,它會怎么做?

    import { useEffect, useState } from 'react';
    const Room = () => {
      useEffect(() => {
        console.log("子組件渲染完成")
        return () => {
          console.log("子組件useeffect 回調函數執(zhí)行")
        }
      }, [])
      return (<div>
        這是我的房間 , 大家一起來玩呀
      </div>)
    }
    function Effect() {
      const [show, setShow] = useState(true)
      return (<div>
        <div>
          {show && <Room></Room>}
        </div>
        <button onClick={() => setShow(!show)}>加1</button>
      </div>)
    }
    export default Effect

    解答 : useEffect函數 的返回值 如果是函數時 它會在組件銷毀的時候自動回調該函數,你可以在該函數中做一些清理操作,等等

    結束啦

    好了,最后到這次本章了解的知識就到此結束了,如果有哪里寫的不對的地方或者有更好的使用方式,歡迎大家在評論區(qū)留言!

    到此這篇關于React中的useEffect四種用法分享的文章就介紹到這了,更多相關React useEffect用法內容請搜索技圈網以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持技圈網!

    聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
    發(fā)表評論
    更多 網友評論0 條評論)
    暫無評論

    返回頂部

    主站蜘蛛池模板: 青青草国产精品| 色多多视频在线| 天天躁狠狠躁狠狠躁性色av| 亚拍精品一区二区三区| 百合潮湿的欲望| 国产在线精品一区二区| 97se色综合一区二区二区| 把水管开水放b里是什么感觉| 亚洲啪啪av无码片| 真实的国产乱xxxx| 国产免费小视频在线观看| 91大神福利视频| 小东西几天没做怎么这么多水| 久久精品青草社区| 欧美黑人性暴力猛交喷水 | 久久久久久久99精品国产片| 欧美肥妇毛多水多bbxx水蜜桃| 可以免费看污视频的网站| 国产四虎免费精品视频| 国内精自品线一区91| 一级特黄a免费大片| 日本高清va在线播放| 亚洲成a人片在线观看久| 秦老头大战秦丽娟无删节| 国产亚洲欧美另类一区二区三区| 24小时免费看片| 天天摸天天爽天天碰天天弄| 中文字幕第一页在线视频| 最新中文字幕在线视频| 亚洲欧洲自拍拍偷午夜色无码| 精品久久久久久久无码| 国产三级日本三级韩国三级在线观看| 怡红院视频在线| 在线观看亚洲av每日更新| 一级人做人爰a全过程免费视频| 日本精品一区二区三区在线视频一| 亚洲午夜无码久久| 歪歪漫画在线观看页面免费漫画入口弹窗秋蝉 | 九九热在线视频观看这里只有精品| 没有被爱过的女人在线| 免费高清日本1在线观看|