国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - React - React useEffect的理解與使用

React useEffect的理解與使用

2022-03-06 21:23RedCHr React

這篇文章主要介紹了React useEffect的理解與使用,幫助大家更好的理解和學習使用React,感興趣的朋友可以了解下

React16.8新增的useEffec這個hook函數就是處理副作用的。

所謂的“副作用”,舉個通俗一點的例子,假如感冒了本來吃點藥就沒事了,但是吃了藥發現身體過敏了,而這個“過敏”就是副作用。

放到React中,本來只是想渲染DOM展示到頁面上,但除了DOM之外還有數據,而這些數據必須從外部的數據源中獲取,這個“獲取外部數據源”的過程就是副作用。

useEffect怎么用可以參考官網給出的例子,這里主要針對使用useEffect過程中遇到的問題進行總結。

避免重復循環渲染

利用useEffect接收一個數組作為第二個參數,將第二個參數作為dependence,每次渲染完DOM執行副作用函數時都會淺比較dependence渲染前后的值是否一致,不一致就執行副作用,反之就不執行;如果該dependence為一個空數組[],即沒有傳入比較變化的變量,則比較結果永遠都保持不變,那么副作用邏輯就只能執行一次。

?
1
2
3
4
5
useEffect(() => {
  setTimeout(() => {   
        setCounter(counter + 1); 
    }, 300)
}, []);

初此之外,如果我們還想通過點擊刷新按鈕實現獲取外部數據但又不想造成死循環,那么可以通過一個變量作為“開關”,在實現目的的同時做到避免循環渲染DOM。

畫動圖太麻煩,各位看注釋腦補

?
1
2
3
4
5
6
7
8
9
function App() {  const [count, setCount] = useState(0);  const [loading, setLoading] = useState(true); // loading作為開關  useEffect(() => {    if (loading) { // 注意這里只有當loading為true時才執行      setTimeout(() => {        setCount(count + 1);        setLoading(!loading); // 改變loading值      });    }  }, [loading]); // loading在這里作為dependence
  // 第一次DOM渲染完成后,loading為true,執行副作用函數,count值變為1,loading變為false,由于
  // 改變了state的值,會update,組件會再次render,但此時loading為false,不會執行setTimeout,
  // 避免了循環
 
  // 當點擊Refresh刷新,loading由上一次的false變為了true,函數執行一次update
  // DOM更新完后執行useEffect,因為loading已經為true了,所以副作用函數可執行,count從1變為2,
  // loading又從true變為false,就這樣交替進行。。。
  return (    <div>      <h3>{count}</h3>      <button        onClick={() => {          setLoading(true);        }}      >        Refresh      </button>    </div>  );}

關于副作用的清除

useEffect可以返回一個函數來作為清除副作用。

?
1
2
3
4
5
6
7
  useEffect(() => {   
    ChatAPI.subscribeToFriendStatus(props.id, handleStatusChange); 
    function clear(){
        ChatAPI.unsubscribeFromFriendStatus(props.id, handleStatusChange);
    
    return clear;
});

這里會涉及到useEffect執行和銷毀的過程:

  1. 傳入props.id = 1
  2. 組件渲染
  3. DOM渲染完成,執行副作用函數,返回清除副作用函數clear,命名為clear1
  4. 傳入props.id=2
  5. 組件渲染
  6. DOM渲染完成,執行clear1
  7. 副作用函數執行并返回另一個clear函數,命名為clear2
  8. 組件銷毀,clear2執行

由此可推測出副作用清除函數的特征:

  • 每次副作用執行都會返回一個清除函數
  • 清除函數會在下一次副作用函數執行之前(DOM渲染完成之后)執行
  • 組件銷毀也會執行一次清除函數

從打印出的count值也可以看出,清除函數會在下一次副作用函數執行之前執行,即在清除函數里的count值是上一次緩存的count值:

React useEffect的理解與使用

進一步思考,clear1執行的時候,訪問了props.id,那么這個id值是1還是2呢?

這里就涉及到閉包的知識概念了,因為useEffect返回的是個函數,在執行時產生了一個閉包,根據閉包的相關定義,返回的clear函數能訪問自身作用域外的變量,當組件第一次渲染時傳入id=1,此時的clear函數中的props.id值為1。

以上就是React useEffect的理解與使用的詳細內容,更多關于React useEffect的資料請關注服務器之家其它相關文章!

原文鏈接:https://juejin.cn/post/6952436447144050725

延伸 · 閱讀

精彩推薦
  • ReactReact中setState的使用與同步異步的使用

    React中setState的使用與同步異步的使用

    這篇文章主要介紹了React中setState的使用與同步異步的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋...

    一顆冰淇淋5272022-02-17
  • ReactReact三大屬性之Refs的使用詳解

    React三大屬性之Refs的使用詳解

    這篇文章主要介紹了React三大屬性之Refs的使用詳解,幫助大家更好的理解和學習使用React,感興趣的朋友可以了解下...

    xiaoznz8962022-03-02
  • React如何用react優雅的書寫CSS

    如何用react優雅的書寫CSS

    這篇文章主要介紹了如何用react優雅的書寫CSS,幫助大家更好的理解和學習使用react,感興趣的朋友可以了解下...

    ws_qy10192022-03-03
  • React詳解React中的不可變值

    詳解React中的不可變值

    這篇文章主要介紹了React中的不可變值的相關資料,幫助大家更好的理解和學習使用react.js,感興趣的朋友可以了解下...

    一個前端王10622022-02-27
  • React詳解react應用中的DOM DIFF算法

    詳解react應用中的DOM DIFF算法

    這篇文章主要介紹了react應用中的DOM DIFF算法,幫助大家更好的理解和學習使用react,感興趣的朋友可以了解下...

    time_w6292022-02-25
  • React使用 React 和 Threejs 創建一個VR全景項目的過程詳解

    使用 React 和 Threejs 創建一個VR全景項目的過程詳解

    這篇文章主要介紹了使用 React 和 Threejs 創建一個VR全景項目的過程詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒...

    Windy Z11112022-02-23
  • React基于 Vite 的組件文檔編寫神器,又快又省心

    基于 Vite 的組件文檔編寫神器,又快又省心

    現在 Vite 的生態逐漸完善,今天給大家介紹一款 React 的組件/應用文檔編寫神器:vite-plugin-react-pages....

    前端星辰5112022-01-04
  • ReactReact事件機制源碼解析

    React事件機制源碼解析

    這篇文章主要介紹了React事件機制源碼解析的相關資料,幫助大家更好的理解和學習使用React框架,感興趣的朋友可以了解下...

    ZHANGYU10802022-02-25
主站蜘蛛池模板: 天天爱天天草 | 日韩一级片 | 亚洲视频免费 | 久久人人爽爽爽人久久久 | 日韩精品观看 | 91欧美激情一区二区三区成人 | 日本看片网站 | 午夜精品久久久久久久久久久久 | 国产精品美女久久久网av | 国产一区二区在线免费观看 | 亚洲精品日本 | 美女在线视频一区二区 | 云南一级毛片 | 精品久久久网站 | 国产精品久久久99 | 日韩av免费在线观看 | 一区二区视频在线观看 | 四虎影视最新免费版 | 精品久久久久久亚洲综合网 | 欧美91| 午夜电影网址 | 亚洲综合在线视频 | 在线午夜 | 天天干天天插 | 视频一区二区在线观看 | 欧美成人一区二区三区 | 欧美成人精品高清视频在线观看 | 亚洲电影二区 | 欧美午夜精品 | 一级电影中文字幕 | 精品国产一区二区三区免费 | 亚洲一区二区av | 久久天堂视频 | 影音先锋男人网 | 久久国产精品久久久久久电车 | 欧美成人精品一区二区三区在线看 | 日韩欧一区二区三区 | 黄色一级毛片网站 | 日韩一区二区观看 | 亚洲视频一区在线播放 | 国产一区二区精品在线 |