最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

hooks中useEffect()使用案例詳解

 更新時(shí)間:2022年09月16日 14:51:29   作者:黃庚中  
這篇文章主要介紹了hooks中useEffect()使用總結(jié),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

常見(jiàn)使用:

獲取數(shù)據(jù)案例:

import React, { useState, useEffect } from 'react';
import axios from 'axios';

function App() {
  const [data, setData] = useState({ hits: [] });

  useEffect(() => {
    const fetchData = async () => {
      const result = await axios(
        'https://hn.algolia.com/api/v1/search?query=redux',
      );

      setData(result.data);
    };

    fetchData();
  }, []);

  return (
    <ul>
      {data.hits.map(item => (
        <li key={item.objectID}>
          <a href={item.url}>{item.title}</a>
        </li>
      ))}
    </ul>
  );
}

export default App;

上面例子中,useState()用來(lái)生成一個(gè)狀態(tài)變量(data),保存獲取的數(shù)據(jù);useEffect()的副效應(yīng)函數(shù)內(nèi)部有一個(gè) async 函數(shù),用來(lái)從服務(wù)器異步獲取數(shù)據(jù)。拿到數(shù)據(jù)以后,再用setData()觸發(fā)組件的重新渲染。

由于獲取數(shù)據(jù)只需要執(zhí)行一次,所以上例的useEffect()的第二個(gè)參數(shù)為一個(gè)空數(shù)組

附線上運(yùn)行代碼

useEffect() 的第二個(gè)參數(shù)說(shuō)明

有時(shí)候,我們不希望useEffect()每次渲染都執(zhí)行,這時(shí)可以使用它的第二個(gè)參數(shù),使用一個(gè)數(shù)組指定副效應(yīng)函數(shù)的依賴項(xiàng),只有依賴項(xiàng)發(fā)生變化,才會(huì)重新渲染。

function Welcome(props) {
  useEffect(() => {
    document.title = `Hello, ${props.name}`;
  }, [props.name]);
  return <h1>Hello, {props.name}</h1>;
}

上面例子中,useEffect()的第二個(gè)參數(shù)是一個(gè)數(shù)組,指定了第一個(gè)參數(shù)(副效應(yīng)函數(shù))的依賴項(xiàng)(props.name)。只有該變量發(fā)生變化時(shí),副效應(yīng)函數(shù)才會(huì)執(zhí)行。如果第二個(gè)參數(shù)是一個(gè)空數(shù)組,就表明副效應(yīng)參數(shù)沒(méi)有任何依賴項(xiàng)。因此,副效應(yīng)函數(shù)這時(shí)只會(huì)在組件加載進(jìn)入 DOM 后執(zhí)行一次,后面組件重新渲染,就不會(huì)再次執(zhí)行。這很合理,由于副效應(yīng)不依賴任何變量,所以那些變量無(wú)論怎么變,副效應(yīng)函數(shù)的執(zhí)行結(jié)果都不會(huì)改變,所以運(yùn)行一次就夠了。

useEffect() 第一個(gè)函數(shù)參數(shù)的返回值

副效應(yīng)是隨著組件加載而發(fā)生的,那么組件卸載時(shí),可能需要清理這些副效應(yīng)。
useEffect()允許返回一個(gè)函數(shù),在組件卸載時(shí),執(zhí)行該函數(shù),清理副效應(yīng)。如果不需要清理副效應(yīng),useEffect()就不用返回任何值。

useEffect(() => {
  const subscription = props.source.subscribe();
  return () => {
    subscription.unsubscribe();
  };
}, [props.source]);

上面例子中,useEffect()在組件加載時(shí)訂閱了一個(gè)事件,并且返回一個(gè)清理函數(shù),在組件卸載時(shí)取消訂閱。

實(shí)際使用中,由于副效應(yīng)函數(shù)默認(rèn)是每次渲染都會(huì)執(zhí)行,所以清理函數(shù)不僅會(huì)在組件卸載時(shí)執(zhí)行一次,每次副效應(yīng)函數(shù)重新執(zhí)行之前,也會(huì)執(zhí)行一次,用來(lái)清理上一次渲染的副效應(yīng)。

useEffect() 的注意點(diǎn)

使用useEffect()時(shí),有一點(diǎn)需要注意。如果有多個(gè)副效應(yīng),應(yīng)該調(diào)用多個(gè)useEffect(),而不應(yīng)該合并寫在一起。
錯(cuò)誤寫法:

function App() {
  const [varA, setVarA] = useState(0);
  const [varB, setVarB] = useState(0);
  useEffect(() => {
    const timeoutA = setTimeout(() => setVarA(varA + 1), 1000);
    const timeoutB = setTimeout(() => setVarB(varB + 2), 2000);

    return () => {
      clearTimeout(timeoutA);
      clearTimeout(timeoutB);
    };
  }, [varA, varB]);

  return <span>{varA}, {varB}</span>;
}

上面的例子是錯(cuò)誤的寫法,副效應(yīng)函數(shù)里面有兩個(gè)定時(shí)器,它們之間并沒(méi)有關(guān)系,其實(shí)是兩個(gè)不相關(guān)的副效應(yīng),不應(yīng)該寫在一起。正確的寫法是將它們分開寫成兩個(gè)useEffect()。
正確寫法:

function App() {
  const [varA, setVarA] = useState(0);
  const [varB, setVarB] = useState(0);

  useEffect(() => {
    const timeout = setTimeout(() => setVarA(varA + 1), 1000);
    return () => clearTimeout(timeout);
  }, [varA]);

  useEffect(() => {
    const timeout = setTimeout(() => setVarB(varB + 2), 2000);

    return () => clearTimeout(timeout);
  }, [varB]);

  return <span>{varA}, {varB}</span>;
}

到此這篇關(guān)于hooks中useEffect()使用總結(jié)的文章就介紹到這了,更多相關(guān)hooks useEffect()使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React實(shí)現(xiàn)文件分片上傳和下載的方法詳解

    React實(shí)現(xiàn)文件分片上傳和下載的方法詳解

    在當(dāng)今的前端開發(fā)中,處理文件流操作已經(jīng)成為一個(gè)常見(jiàn)的需求,無(wú)論是上傳、下載、讀取、展示還是其他的文件處理操作,都需要高效且可靠地處理二進(jìn)制數(shù)據(jù),本文將深入探討如何使用 React 實(shí)現(xiàn)文件分片上傳和下載,并介紹相關(guān)的基本概念和技術(shù),需要的朋友可以參考下
    2023-08-08
  • React Native Popup實(shí)現(xiàn)示例

    React Native Popup實(shí)現(xiàn)示例

    本文主要介紹了React Native Popup實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • React Fiber與調(diào)和深入分析

    React Fiber與調(diào)和深入分析

    Fiber可以理解為一個(gè)執(zhí)行單元,每次執(zhí)行完一個(gè)執(zhí)行單元,React Fiber就會(huì)檢查還剩多少時(shí)間,如果沒(méi)有時(shí)間則將控制權(quán)讓出去,然后由瀏覽器執(zhí)行渲染操作,這篇文章主要介紹了React Fiber架構(gòu)原理剖析,需要的朋友可以參考下
    2022-11-11
  • React memo減少重復(fù)渲染詳解

    React memo減少重復(fù)渲染詳解

    React.memo為高階組件。它與React.PureComponent 非常相似,但它適用于函數(shù)組件,但不適用于class組件。文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-10-10
  • React18的useEffect執(zhí)行兩次如何應(yīng)對(duì)

    React18的useEffect執(zhí)行兩次如何應(yīng)對(duì)

    這篇文章主要給大家介紹了關(guān)于React18的useEffect執(zhí)行兩次如何應(yīng)對(duì)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用React具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 手把手教您實(shí)現(xiàn)react異步加載高階組件

    手把手教您實(shí)現(xiàn)react異步加載高階組件

    這篇文章主要介紹了手把手教您實(shí)現(xiàn)react異步加載高階組件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 基于React封裝組件的實(shí)現(xiàn)步驟

    基于React封裝組件的實(shí)現(xiàn)步驟

    很多小伙伴在第一次嘗試封裝組件時(shí)會(huì)和我一樣碰到許多問(wèn)題,本文主要介紹了基于React封裝組件的實(shí)現(xiàn)步驟,感興趣的可以了解一下
    2021-11-11
  • 深入理解React中es6創(chuàng)建組件this的方法

    深入理解React中es6創(chuàng)建組件this的方法

    this的本質(zhì)可以這樣說(shuō),this跟作用域無(wú)關(guān)的,只跟執(zhí)行上下文有關(guān)。接下來(lái)通過(guò)本文給大家介紹React中es6創(chuàng)建組件this的方法,非常不錯(cuò),感興趣的朋友一起看看吧
    2016-08-08
  • 詳解react-redux插件入門

    詳解react-redux插件入門

    這篇文章主要介紹了詳解react-redux插件入門,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • react router 4.0以上的路由應(yīng)用詳解

    react router 4.0以上的路由應(yīng)用詳解

    本篇文章主要介紹了react router 4.0以上的路由應(yīng)用詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09

最新評(píng)論

大荔县| 永寿县| 阿克苏市| 云龙县| 东港市| 准格尔旗| 济源市| 永丰县| 德阳市| 阿拉善盟| 曲靖市| 班戈县| 手游| 泊头市| 濮阳县| 武汉市| 中阳县| 宣化县| 晋州市| 辛集市| 涟源市| 蕲春县| 霍林郭勒市| 奉新县| 广宗县| 广东省| 凉城县| 老河口市| 庆云县| 承德市| 凤山县| 铜鼓县| 潼关县| 阜宁县| 博罗县| 湾仔区| 呈贡县| 潜山县| 巴楚县| 交城县| 尤溪县|