每天學(xué)習(xí)一個(gè)hooks?useMount
??先講點(diǎn)廢話
useMount,在組件首次渲染時(shí)執(zhí)行。這個(gè)hook的用處也很多,比如有個(gè)select下拉框,里面的數(shù)據(jù),就需要在初始化的時(shí)候請求后端的數(shù)據(jù)。
??來看看效果
可以看到,只有在初始化時(shí),useMount執(zhí)行了,頁面重新渲染時(shí),并不會執(zhí)行。
??源碼實(shí)現(xiàn)
const useMount = (fn: () => void) => { // 判斷一下,傳如的fn是否時(shí)一個(gè)函數(shù) if (isFunction(fn)) { useEffect(() => { fn?.(); }, []); return; } console.error(`useMount: parameter \`fn\` expected to be a function, but got "${typeof fn}".`); };
??完整demo源碼
import { useEffect, useState } from "react"; import { isFunction } from "lodash"; const UseMountDemo = () => { const [, setState] = useState({}); const useMount = (fn: () => void) => { if (isFunction(fn)) { useEffect(() => { fn?.(); }, []); return; } console.error(`useMount: parameter \`fn\` expected to be a function, but got "${typeof fn}".`); }; useMount(() => { console.log("我只在初始化的時(shí)候運(yùn)行一次"); }); console.log("組件渲染了"); return <button onClick={() => setState({})}>重新render</button>; }; export default UseMountDemo;
useUnmount
useUnmount,組件卸載時(shí)執(zhí)行的 Hook,比如組件卸載時(shí),需要清楚定時(shí)器或者相關(guān)的監(jiān)聽,就可以使用useUnmount。
??參考
有興趣的小伙伴可以去看,react-use 和 ahooks 的源碼,學(xué)習(xí)前輩們優(yōu)雅的代碼??。
以上就是每天學(xué)習(xí)一個(gè)hooks useMount的詳細(xì)內(nèi)容,更多關(guān)于hooks useMount學(xué)習(xí)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
react使用節(jié)流函數(shù)防止重復(fù)點(diǎn)擊問題
這篇文章主要介紹了react使用節(jié)流函數(shù)防止重復(fù)點(diǎn)擊問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06React?Native?中處理?Android?手機(jī)吞字的解決方案
這篇文章主要介紹了React?Native?中處理?Android?手機(jī)吞字的解決方案,作者在 React Native 0.67.4 環(huán)境下,編寫了一個(gè)小 demo 來復(fù)現(xiàn)這個(gè)問題,需要的朋友可以參考下2022-08-08React18?useState何時(shí)執(zhí)行更新及微任務(wù)理解
這篇文章主要為大家介紹了React18?useState何時(shí)執(zhí)行更新及微任務(wù)理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11ReactiveCocoa代碼實(shí)踐之-UI組件的RAC信號操作
這篇文章主要介紹了ReactiveCocoa代碼實(shí)踐之-UI組件的RAC信號操作 的相關(guān)資料,需要的朋友可以參考下2016-04-04