React中的useEffect四種用法分享
什么是 useEffect ?
官方解釋 : useEffect
是一個(gè) React Hook,它允許你將組件與外部系統(tǒng)同步。
什么意思 ? 個(gè)人理解就是 它能根據(jù)不同的依賴值或者返回值,在不同的時(shí)機(jī)進(jìn)行執(zhí)行。
我們先來(lái)說(shuō)說(shuō) 第一種用法
1 : useEffect 中 觸發(fā)更新
示例1 : 當(dāng)我們?cè)诮M件創(chuàng)建的過(guò)程,自動(dòng)執(zhí)行某些操作的時(shí)候 , 那我們可以在函數(shù)式組件中這樣
錯(cuò)誤示例
import { useEffect } from 'react' function App () { const [ count , setCount] = useState(0) useEffect(()=> { initData() }) const initData = () => { setCount(count + 1) } return ( <div> {count} </div> ) }
如果你這種用 useEffect 你會(huì)發(fā)現(xiàn) 什么問(wèn)題 ?
當(dāng)我們組件 渲染完成去執(zhí)行 useEffect 調(diào)用 initData
函數(shù) 函數(shù)通過(guò) setCount 設(shè)置值觸發(fā)更新,一旦更新 useEffect 又會(huì)在渲染的最后執(zhí)行,這樣就照成了 死循環(huán)
所以 你應(yīng)該這樣寫(xiě) ,傳入 useEffect 第二個(gè)參數(shù) 空數(shù)組,代表組件渲染過(guò)程中只執(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 重復(fù)的 useEffect
示例2 : 當(dāng)我們?cè)诮M件渲染的過(guò)程中 ,如果你寫(xiě)了多個(gè)useEffect 它會(huì)怎么做 ?
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
想當(dāng)然 , 它不會(huì)覆蓋前面的 useEffect ,會(huì)根據(jù)你的 編寫(xiě)順序進(jìn)行收集,然后循環(huán)執(zhí)行(當(dāng)然這只是我的猜測(cè),暫時(shí)還沒(méi)看react源碼
)
3 :依賴值觸發(fā)回調(diào)
當(dāng)你想去依賴某些變量的時(shí)候去觸發(fā)回調(diào)函數(shù),你可以這樣。
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
當(dāng)你的第二個(gè)參數(shù)是數(shù)組,并且是依賴項(xiàng),組件初次渲染也會(huì)執(zhí)行,這是為什么呢 ?
解答 : 如果從 react useState Hook 來(lái)說(shuō),也就是 react 將你傳入的 默認(rèn)值 給你重新賦值了,所以發(fā)生了變化,因此 useEffect 發(fā)生了更新
4 :useEffect 的返回值
當(dāng)useEffect 傳入的 回調(diào)函數(shù)有返回值時(shí)并且為一個(gè) 函數(shù)的時(shí)候,它會(huì)怎么做?
import { useEffect, useState } from 'react'; const Room = () => { useEffect(() => { console.log("子組件渲染完成") return () => { console.log("子組件useeffect 回調(diào)函數(shù)執(zhí)行") } }, []) return (<div> 這是我的房間 , 大家一起來(lái)玩呀 </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函數(shù) 的返回值 如果是函數(shù)時(shí) 它會(huì)在組件銷毀的時(shí)候自動(dòng)回調(diào)該函數(shù),你可以在該函數(shù)中做一些清理操作,等等
結(jié)束啦
好了,最后到這次本章了解的知識(shí)就到此結(jié)束了,如果有哪里寫(xiě)的不對(duì)的地方或者有更好的使用方式,歡迎大家在評(píng)論區(qū)留言!
到此這篇關(guān)于React中的useEffect四種用法分享的文章就介紹到這了,更多相關(guān)React useEffect用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用React Native創(chuàng)建以太坊錢包實(shí)現(xiàn)轉(zhuǎn)賬等功能
這篇文章主要介紹了使用React Native創(chuàng)建以太坊錢包,實(shí)現(xiàn)轉(zhuǎn)賬等功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07react-native-tab-navigator組件的基本使用示例代碼
本篇文章主要介紹了react-native-tab-navigator組件的基本使用示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-09-09使用React18和WebSocket構(gòu)建實(shí)時(shí)通信功能詳解
WebSocket是一種在Web應(yīng)用中實(shí)現(xiàn)雙向通信的協(xié)議,它允許服務(wù)器主動(dòng)向客戶端推送數(shù)據(jù),而不需要客戶端發(fā)起請(qǐng)求,本文將探索如何在React?18應(yīng)用中使用WebSocket來(lái)實(shí)現(xiàn)實(shí)時(shí)通信,感興趣的可以了解下2024-01-01為react組件庫(kù)添加typescript類型提示的方法
這篇文章主要介紹了為react組件庫(kù)添加typescript類型提示,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06react高階組件經(jīng)典應(yīng)用之權(quán)限控制詳解
在React中,高階組件是重用組件邏輯的一項(xiàng)高級(jí)技術(shù)。下面這篇文章主要給大家介紹了關(guān)于react高階組件經(jīng)典應(yīng)用之權(quán)限控制的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09基于React編寫(xiě)一個(gè)全局Toast的示例代碼
前些日子在做項(xiàng)目的時(shí)候,需要封裝一個(gè)Toast組件,我想起之前用過(guò)的庫(kù),只要在入口文件中引入就可以在全局中使用,還是很方便的,借這次機(jī)會(huì)也來(lái)實(shí)現(xiàn)一下,所以本文介紹了React中如何編寫(xiě)一個(gè)全局Toast,需要的朋友可以參考下2024-05-05React?UI組件庫(kù)之快速實(shí)現(xiàn)antd的按需引入和自定義主題
react入門(mén)學(xué)習(xí)告一段路,下面這篇文章主要給大家介紹了關(guān)于React?UI組件庫(kù)之快速實(shí)現(xiàn)antd的按需引入和自定義主題的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07解讀useState第二個(gè)參數(shù)的"第二個(gè)參數(shù)"
這篇文章主要介紹了useState第二個(gè)參數(shù)的"第二個(gè)參數(shù)",具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03