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

react中useEffect函數(shù)的詳細用法(最新推薦)

 更新時間:2024年06月22日 16:20:00   作者:編程磚家  
useEffect是React中的一個Hook,用于在函數(shù)組件中處理副作用(如數(shù)據(jù)獲取、訂閱、手動更改 DOM 等),useEffect屬于組件的生命周期方法,下面通過本文給大家分享react中useEffect函數(shù)的詳細用法,感興趣的朋友跟隨小編一起看看吧

1、函數(shù)介紹

useEffect 是 React 中的一個 Hook,用于在函數(shù)組件中處理副作用(如數(shù)據(jù)獲取、訂閱、手動更改 DOM 等)。與類組件中的生命周期方法(如 componentDidMountcomponentDidUpdatecomponentWillUnmount)類似,useEffect 讓你在函數(shù)組件中完成相同的操作。( from chatGPT)

        簡單來說,useEffect屬于組件的生命周期方法。在組件不同的生命周期,我們可以通過useEffect函數(shù)來控制執(zhí)行過程。 那么什么是組件的生命周期呢?

2.組件的生命周期

        在 React 中,組件的生命周期分為三個主要階段:掛載(Mounting)、更新(Updating)和卸載(Unmounting)。掛載和渲染是關(guān)鍵的生命周期階段,理解它們對于有效地使用 React 至關(guān)重要。

2.1 掛載(Mounting)

載是指組件第一次被插入到 DOM 中的過程。掛載階段包括以下步驟:

  • 構(gòu)造函數(shù)(Constructor):組件的構(gòu)造函數(shù)被調(diào)用。如果你在類組件中定義了構(gòu)造函數(shù),那么它會在組件實例化時首先被調(diào)用。
  • getDerivedStateFromProps(靜態(tài)方法):在初始化和更新期間調(diào)用,允許組件基于輸入的 props 來更新狀態(tài)。它是一個靜態(tài)方法,不能訪問組件實例。
  • render:渲染方法被調(diào)用。它返回要渲染的元素(通常是 JSX)。
  • componentDidMount:組件已經(jīng)被掛載到 DOM 中,此時可以執(zhí)行一些副作用操作,比如數(shù)據(jù)獲取、訂閱事件等。

2.2 渲染和更新

渲染(Rendering)

渲染是指組件根據(jù)其當(dāng)前狀態(tài)和屬性生成要顯示的元素。每次組件的狀態(tài)或?qū)傩园l(fā)生變化時,渲染過程都會被觸發(fā)。渲染階段包括:

  • render 方法(類組件):被調(diào)用以生成虛擬 DOM 結(jié)構(gòu)。
  • 函數(shù)組件本身:被調(diào)用以生成虛擬 DOM 結(jié)構(gòu)。

在每次狀態(tài)或?qū)傩宰兓瘯r,組件會重新渲染。React 將對比虛擬 DOM(使用 Diff 算法)并更新實際 DOM 以反映變化。

更新(Updating)

更新是指組件的狀態(tài)或?qū)傩园l(fā)生變化并重新渲染的過程。更新階段包括以下步驟:

  • getDerivedStateFromProps(靜態(tài)方法):同掛載階段一樣,在屬性變化時調(diào)用。
  • shouldComponentUpdate:決定組件是否應(yīng)該重新渲染。返回 true 表示重新渲染,返回 false 表示跳過更新。
  • render:渲染方法被調(diào)用以生成新的虛擬 DOM 結(jié)構(gòu)。
  • getSnapshotBeforeUpdate:在 DOM 更新之前被調(diào)用,返回的值將作為 componentDidUpdate 的第三個參數(shù)。
  • componentDidUpdate:組件更新并重新渲染到 DOM 之后調(diào)用,可執(zhí)行副作用操作。

2.3 卸載(Unmounting)

卸載是指組件被移出 DOM 的過程。卸載階段只包括一個方法:

componentWillUnmount:組件即將卸載時調(diào)用,可以在這里執(zhí)行清理操作,例如取消訂閱、清除定時器等。

2.4 總結(jié)

  • 掛載:組件第一次被插入到 DOM 中時執(zhí)行。類組件中使用 componentDidMount,函數(shù)組件中使用 useEffect(空依賴數(shù)組)。
  • 渲染:每次組件的狀態(tài)或?qū)傩宰兓瘯r,都會重新生成虛擬 DOM 并更新實際 DOM。
  • 更新:狀態(tài)或?qū)傩宰兓鸾M件重新渲染。類組件中使用 componentDidUpdate,函數(shù)組件中使用 useEffect(依賴數(shù)組)。
  • 卸載:組件被移出 DOM 時執(zhí)行。類組件中使用 componentWillUnmount,函數(shù)組件中通過 useEffect 的清理函數(shù)處理。

3、函數(shù)的基本用法

        有了對組件生命周期的認識,那么就可以利用useEffect函數(shù)根據(jù)組件不同的生命周期階段來執(zhí)行不同的方法。比如:

  • 有的方法只希望在執(zhí)行一次,即在組件掛載的時候執(zhí)行一次就夠了,后面也不需要再次執(zhí)行
  • 有的方法希望在組件每次渲染(元素有更新)的時候都執(zhí)行
  • 有的方法希望在某個依賴的變量發(fā)生變化時才會執(zhí)行
  • 有的方法希望在組件卸載(頁面退出的)的時候執(zhí)行

上面的執(zhí)行過程都都可以通過useEffect方法做到。

3.1 用法示例

import React, { useState, useEffect } from 'react';
function ExampleComponent() {
  const [count, setCount] = useState(0);
  useEffect(() => {
    // 這里的代碼相當(dāng)于 componentDidMount 和 componentDidUpdate
    document.title = `You clicked ${count} times`;
    // 如果需要清理,可以返回一個函數(shù)
    return () => {
      // 這里的代碼相當(dāng)于 componentWillUnmount
      console.log('Cleaning up...');
    };
  }, [count]); // 依賴數(shù)組
  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>Click me</button>
    </div>
  );
}
export default ExampleComponent;

3.2 用法說明

副作用的執(zhí)行

  • useEffect 的第一個參數(shù)是一個函數(shù),它在組件渲染后執(zhí)行??梢栽谶@個函數(shù)內(nèi)進行副作用操作。
  • 如果需要清理副作用,可以在這個函數(shù)中返回一個函數(shù),這個返回的函數(shù)會在組件卸載或副作用重新執(zhí)行前調(diào)用。

依賴數(shù)組

  • useEffect 的第二個參數(shù)是一個依賴數(shù)組(可以依賴多個變量),表示副作用依賴的變量。當(dāng)依賴數(shù)組中的任何一個變量發(fā)生變化時,副作用函數(shù)會重新執(zhí)行。
  • 如果依賴數(shù)組為空([]),副作用函數(shù)只會在組件掛載和卸載時執(zhí)行一次,類似于 componentDidMountcomponentWillUnmount。
  • 如果不傳依賴數(shù)組,副作用函數(shù)會在每次組件渲染后執(zhí)行,類似于 componentDidUpdate

3.3 使用規(guī)則

  • 在組件頂層調(diào)用:只能在 React 函數(shù)組件或自定義 Hook 的頂層調(diào)用 useEffect,不要在循環(huán)、條件或嵌套函數(shù)中調(diào)用。
  • 依賴數(shù)組:確保正確設(shè)置依賴數(shù)組,以避免不必要的副作用執(zhí)行或缺少必要的更新。

到此這篇關(guān)于react中useEffect函數(shù)的詳細用法的文章就介紹到這了,更多相關(guān)react useEffect函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用React?MUI庫實現(xiàn)用戶列表分頁功能

    使用React?MUI庫實現(xiàn)用戶列表分頁功能

    MUI是一款基于React的UI組件庫,可以方便地構(gòu)建美觀的用戶界面,使用MUI的DataTable組件和分頁器組件可以輕松實現(xiàn)用戶列表分頁功能,這篇文章使用MUI庫實現(xiàn)了用戶列表分頁功能,感興趣的同學(xué)可以參考下文
    2023-05-05
  • React+Vite中利用Fetch將CSV數(shù)據(jù)轉(zhuǎn)成JSON字符串

    React+Vite中利用Fetch將CSV數(shù)據(jù)轉(zhuǎn)成JSON字符串

    在一些小型項目中,前端可能需要直接處理 CSV 文件數(shù)據(jù),將其轉(zhuǎn)換為 JSON 字符串后再進行邏輯操作和展示,本文將會介紹兩種方法,需要的朋友可以參考下
    2025-12-12
  • 可定制react18 input otp 一次性密碼輸入組件

    可定制react18 input otp 一次性密碼輸入組件

    這篇文章主要為大家介紹了可定制react18 input otp 一次性密碼輸入組件,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 詳解React-Router中Url參數(shù)改變頁面不刷新的解決辦法

    詳解React-Router中Url參數(shù)改變頁面不刷新的解決辦法

    這篇文章主要介紹了詳解React-Router中Url參數(shù)改變頁面不刷新的解決辦法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • react-beautiful-dnd 實現(xiàn)組件拖拽功能

    react-beautiful-dnd 實現(xiàn)組件拖拽功能

    這篇文章主要介紹了react-beautiful-dnd 實現(xiàn)組件拖拽功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • 一文搞懂 React 19 新特性

    一文搞懂 React 19 新特性

    React 19 引入多項重要更新,主要聚焦于異步狀態(tài)管理、性能優(yōu)化和開發(fā)體驗提升,這些改進顯著減少了狀態(tài)管理樣板代碼,提升了應(yīng)用性能和開發(fā)效率,感興趣的可以了解一下
    2026-05-05
  • 詳解React中Fragment的簡單使用

    詳解React中Fragment的簡單使用

    這篇文章主要介紹了詳解React中Fragment的簡單使用,文中通過示例代碼介紹的非常詳細,對我們學(xué)習(xí)React有一定的幫助,感興趣的小伙伴們可以參考一下
    2022-10-10
  • React如何使用axios請求數(shù)據(jù)并把數(shù)據(jù)渲染到組件

    React如何使用axios請求數(shù)據(jù)并把數(shù)據(jù)渲染到組件

    這篇文章主要介紹了React如何使用axios請求數(shù)據(jù)并把數(shù)據(jù)渲染到組件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • React使用Context的一些優(yōu)化建議

    React使用Context的一些優(yōu)化建議

    Context?提供了一個無需為每層組件手動添加?props,就能在組件樹間進行數(shù)據(jù)傳遞的方法,本文為大家整理了React使用Context的一些優(yōu)化建議,希望對大家有所幫助
    2024-04-04
  • 深入淺析react native es6語法

    深入淺析react native es6語法

    這篇文章主要介紹了深入淺析react native es6語法的相關(guān)資料,需要的朋友可以參考下
    2015-12-12

最新評論

额济纳旗| 九龙县| 嵊泗县| 土默特右旗| 濮阳市| 会同县| 元朗区| 黄石市| 鹤山市| 邵阳市| 德清县| 河西区| 乌兰县| 云阳县| 独山县| 乌兰浩特市| 吉木萨尔县| 徐闻县| 陆良县| 江阴市| 中方县| 微山县| 偏关县| 普兰店市| 都昌县| 棋牌| 信阳市| 宁乡县| 东乡族自治县| 昭觉县| 丰县| 滁州市| 汉川市| 同德县| 河曲县| 潞城市| 渝中区| 岑巩县| 灵石县| 乌拉特前旗| 海宁市|