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

React useEffect的理解與使用

 更新時間:2022年12月22日 10:42:13   作者:咸蛋超人l  
useEffect是react v16.8新引入的特性。我們可以把useEffect hook看作是componentDidMount、componentDidUpdate、componentWillUnmounrt三個函數(shù)的組合

useEffect 介紹

如果你熟悉 React class 的生命周期函數(shù),你可以把 useEffect Hook 看做

componentDidMount,componentDidUpdate 和 componentWillUnmount 這三個函數(shù)的組合。

  • componentDidMount 組件掛載
  • componentDidUpdate 組件更新
  • componentWillUnmount 組件將要摧毀

使用方法

情況一:

useEffect需要傳遞兩個參數(shù),第一個參數(shù)是邏輯處理函數(shù),第二個參數(shù)是一個數(shù)組

代碼如下:

useEffect(() => {
/** 執(zhí)行邏輯 */
},[])

情況二:

  • 第二個參數(shù)存放變量,當(dāng)數(shù)組存放變量發(fā)生改變時,第一個參數(shù),邏輯處理函數(shù)將會被執(zhí)行
  • 第二個參數(shù)可以不傳,不會報錯,但瀏覽器會無限循環(huán)執(zhí)行邏輯處理函數(shù)。

代碼如下:

useEffect(() => {
/** 執(zhí)行邏輯 */
})

情況三:

第二個參數(shù)如果只傳一個空數(shù)組,邏輯處理函數(shù)里面的邏輯只會在組件掛載時執(zhí)行一次 ,等價于 componentDidMount

代碼如下:

useEffect(() => {
/** 執(zhí)行邏輯 */
},[])

情況四:

  • 第二個參數(shù)如果不為空數(shù)組,依賴指定參數(shù)觸發(fā)使用
  • 邏輯處理函數(shù)會在組件掛載時執(zhí)行一次和(a或者b變量在棧中的值發(fā)生改變時執(zhí)行一次) 這是不是相當(dāng)于componentDidMount 和componentDidUpdate 的結(jié)合
const [a, setA] = useState(1);
const [b, setB] = useState(2);
useEffect(() => {
/** 執(zhí)行邏輯 */
},[a,b])

情況五:

  • useEffect第一個參數(shù)可以返回一個回調(diào)函數(shù),這個回調(diào)函數(shù)將會在組件被摧毀之前和再一次觸發(fā)更新時,將之前的副作用清除掉。這就相當(dāng)于componentWillUnmount。
  • useEffect去除副作用。我們可能會在組件即將被掛載的時候創(chuàng)建一些不斷循環(huán)的訂閱(計時器,或者遞歸循環(huán))。在組件被摧毀之前,或者依賴數(shù)組的元素更新后,應(yīng)該將這些訂閱也給摧毀掉。

比如以下的情況(沒有去除計時器,增大不必要的開銷和代碼風(fēng)險)

const [time, setTime] = useState(0)
useEffect(() => {
	const InterVal = setInterval(() => {
		setTime(time + 1)
	},1000)
},[])

處理在組件被摧毀前去除計時器

const [time, setTime] = useState(0)
useEffect(() => {
	const InterVal = setInterval(() => {
		setTime(time + 1)
	},1000)
	return () => {
   		clearInterval(InterVal )
   	}
},[])

特殊情況處理

useEffect監(jiān)測不到依賴數(shù)組元素的變化。

只有一種可能,依賴數(shù)組元素的地址的值根本就沒變,

原因:因為changeA沒有真正的改變a在棧中的值(地址的值),只是改變了a在堆中的值。

useEffect監(jiān)測不到堆中值得變化,所有引用類型數(shù)據(jù)都應(yīng)該注意這一點。

代碼示例:

const [a, setA] = useState({
b: 'dx',
c: '18',
})
const changeA = () => {
	setA((old) => {
	old.b = 'yx'
	return old
	})
}
useEffect(() => {
/** 當(dāng)組件掛載時執(zhí)行一次changeA */
changeA ()
},[])
/**當(dāng)changeA執(zhí)行卻沒有打印 a*/
useEffect(() => {
/** 執(zhí)行邏輯 */
console.log(a)
},[a])

解決的辦法

const [a, setA] = useState({
b: 'dx',
c: '18',
})
const changeA = () => {
	setA((old) => {
	const newA = {...old}
	newA .b = 'yx'
	return newA 
	})
}
useEffect(() => {
/** 當(dāng)組件掛載時執(zhí)行一次changeA */
changeA ()
},[])
/**當(dāng)changeA執(zhí)行打印  {b:'yx',c:'18'}  */
useEffect(() => {
/** 執(zhí)行邏輯 */
console.log(a)
},[a])

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

相關(guān)文章

  • react-native 配置@符號絕對路徑配置和絕對路徑?jīng)]有提示的問題

    react-native 配置@符號絕對路徑配置和絕對路徑?jīng)]有提示的問題

    本文主要介紹了react-native 配置@符號絕對路徑配置和絕對路徑?jīng)]有提示的問題,文中通過圖文示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • react中的ajax封裝實例詳解

    react中的ajax封裝實例詳解

    這篇文章主要介紹了react中的ajax封裝實例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • React構(gòu)建組件的幾種方式及區(qū)別

    React構(gòu)建組件的幾種方式及區(qū)別

    這篇文章主要介紹了React構(gòu)建組件的幾種方式及區(qū)別,組件就是把圖形、非圖形的各種邏輯均抽象為一個統(tǒng)一的概念來實現(xiàn)開發(fā)的模式文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • React 添加引用路徑時如何使用@符號作為src文件

    React 添加引用路徑時如何使用@符號作為src文件

    這篇文章主要介紹了React 添加引用路徑時如何使用@符號作為src文件,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • React中mobx和redux的區(qū)別及說明

    React中mobx和redux的區(qū)別及說明

    這篇文章主要介紹了React中mobx和redux的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • React中的Refs屬性你來了解嗎

    React中的Refs屬性你來了解嗎

    這篇文章主要為大家詳細(xì)介紹了的React?Refs屬性,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • create-react-app中添加less支持的實現(xiàn)

    create-react-app中添加less支持的實現(xiàn)

    這篇文章主要介紹了react.js create-react-app中添加less支持的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 詳解React-Native解決鍵盤遮擋問題(Keyboard遮擋問題)

    詳解React-Native解決鍵盤遮擋問題(Keyboard遮擋問題)

    本篇文章主要介紹了React-Native解決鍵盤遮擋問題(Keyboard遮擋問題),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 基于React封裝一個驗證碼輸入控件

    基于React封裝一個驗證碼輸入控件

    郵箱、手機(jī)驗證碼輸入是許多在線服務(wù)和網(wǎng)站常見的安全驗證方式之一,本文主要來和大家討論一下如何使用React封裝一個驗證碼輸入控件,感興趣的可以了解下
    2024-03-03
  • react組件多次渲染問題的解決

    react組件多次渲染問題的解決

    本文主要介紹了react組件多次渲染問題的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評論

靖宇县| 葫芦岛市| 赣州市| 尼玛县| 永丰县| 奉节县| 共和县| 宁蒗| 盈江县| 丹巴县| 织金县| 云浮市| 微山县| 赤城县| 青海省| 苏尼特左旗| 九寨沟县| 剑阁县| 南昌市| 阿克苏市| 南开区| 绥宁县| 平乡县| 吉木乃县| 门头沟区| 贺兰县| 新田县| 翼城县| 离岛区| 通城县| 仪征市| 墨玉县| 双峰县| 长阳| 泌阳县| 民权县| 张北县| 沅江市| 北川| 浦东新区| 阳山县|