每天一個(gè)hooks學(xué)習(xí)之useUpdateEffect
先講點(diǎn)廢話
useUpdateEffect
用法等同于 useEffect
,但是會(huì)忽略首次執(zhí)行,只在依賴更新時(shí)執(zhí)行。
有些場(chǎng)景我們不想在首次渲染時(shí)就執(zhí)行 effect,比如搜索時(shí),只在 keyword 變化時(shí)才調(diào)用 search 方法。這個(gè)hooks在平時(shí)工作中也用的比較多的,所以我們來寫寫它的源碼還是很有必要的??。
??來看看效果
可以看到,第一次只有useEffect會(huì)打印count,只有count變化時(shí),useUpdateEffect
才會(huì)打印出count
??源碼實(shí)現(xiàn)
import React, { useEffect, useRef } from 'react'; const useUpdateEffect = ( effect: React.EffectCallback, deps: React.DependencyList, ) => { let isFirst = useRef(true); useEffect(() => { if (isFirst.current) { isFirst.current = false; return; } return effect(); }, [deps]); };
??完整demo源碼
import React, { useEffect, useRef } from 'react'; import { Button } from 'antd'; const useUpdateEffect = ( effect: React.EffectCallback, deps: React.DependencyList, ) => { let isFirst = useRef(true); useEffect(() => { if (isFirst.current) { isFirst.current = false; return; } return effect(); }, [deps]); }; const Demo = () => { const [count, setCount] = React.useState(0); useEffect(() => { console.log('useEffect的count', count); }, [count]); useUpdateEffect(() => { console.log('useUpdateEffect的count', count); }, [count]); return ( <> <div>Count: {count}</div> <Button type="primary" onClick={() => setCount(count + 1)}> 點(diǎn)我+ 1 </Button> </> ); }; export default Demo;
??參考
有興趣的小伙伴可以去看,react-use 和 ahooks 的源碼,學(xué)習(xí)前輩們優(yōu)雅的代碼??。
以上就是每天一個(gè)hooks學(xué)習(xí)之useUpdateEffect的詳細(xì)內(nèi)容,更多關(guān)于hooks學(xué)習(xí)useUpdateEffect的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
jenkins分環(huán)境部署vue/react項(xiàng)目的方法步驟
這篇文章主要介紹了jenkins分環(huán)境部署vue/react項(xiàng)目的方法,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02React簡(jiǎn)便獲取經(jīng)緯度信息的方法詳解
在現(xiàn)代的Web應(yīng)用程序中,獲取用戶的地理位置信息是一項(xiàng)常見的需求,本文我們將介紹如何在React應(yīng)用程序中簡(jiǎn)便地獲取用戶的經(jīng)緯度信息,需要的可以參考下2023-11-11詳解如何封裝和使用一個(gè)React鑒權(quán)組件
JavaScript?和?React?提供了靈活的事件處理機(jī)制,特別是通過利用事件的捕獲階段來阻止事件傳播可以實(shí)現(xiàn)精細(xì)的權(quán)限控制,本文將詳細(xì)介紹這一技術(shù)的應(yīng)用,并通過實(shí)踐案例展示如何封裝和使用一個(gè)?React?鑒權(quán)組件,需要的可以參考下2024-03-03解決react-connect中使用forwardRef遇到的問題
這篇文章主要介紹了解決react-connect中使用forwardRef遇到的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05