react生命周期圖解(react生命周期)
關(guān)于react生命周期圖解,react生命周期這個(gè)很多人還不知道,今天菲菲來為大家解答以上的問題,現(xiàn)在讓我們一起來看看吧!
1、概述 就像 Android 開發(fā)中的 View 一樣,React Native(RN) 中的組件也有生命周期(Lifecycle)。
2、所謂生命周期,就是一個(gè)對(duì)象從開始生成到最后消亡所經(jīng)歷的狀態(tài),理解生命周期,是合理開發(fā)的關(guān)鍵。
3、RN 組件的生命周期整理如下圖: 如圖,可以把組件生命周期大致分為三個(gè)階段: 第一階段:是組件第一次繪制階段,如圖中的上面虛線框內(nèi),在這里完成了組件的加載和初始化; 第二階段:是組件在運(yùn)行和交互階段,如圖中左下角虛線框,這個(gè)階段組件可以處理用戶交互,或者接收事件更新界面; 第三階段:是組件卸載消亡的階段,如圖中右下角的虛線框中,這里做一些組件的清理工作。
4、 生命周期回調(diào)函數(shù) 下面來詳細(xì)介紹生命周期中的各回調(diào)函數(shù)。
5、 getDefaultProps 在組件創(chuàng)建之前,會(huì)先調(diào)用 getDefaultProps(),這是全局調(diào)用一次,嚴(yán)格地來說,這不是組件的生命周期的一部分。
6、在組件被創(chuàng)建并加載候,首先調(diào)用 getInitialState(),來初始化組件的狀態(tài)。
7、 componentWillMount 然后,準(zhǔn)備加載組件,會(huì)調(diào)用 componentWillMount(),其原型如下: void componentWillMount() 這個(gè)函數(shù)調(diào)用時(shí)機(jī)是在組件創(chuàng)建,并初始化了狀態(tài)之后,在第一次繪制 render() 之前。
8、可以在這里做一些業(yè)務(wù)初始化操作,也可以設(shè)置組件狀態(tài)。
9、這個(gè)函數(shù)在整個(gè)生命周期中只被調(diào)用一次。
10、 componentDidMount 在組件第一次繪制之后,會(huì)調(diào)用 componentDidMount(),通知組件已經(jīng)加載完成。
11、函數(shù)原型如下: void componentDidMount() 這個(gè)函數(shù)調(diào)用的時(shí)候,其虛擬 DOM 已經(jīng)構(gòu)建完成,你可以在這個(gè)函數(shù)開始獲取其中的元素或者子組件了。
12、需要注意的是,RN 框架是先調(diào)用子組件的 componentDidMount(),然后調(diào)用父組件的函數(shù)。
13、從這個(gè)函數(shù)開始,就可以和 JS 其他框架交互了,例如設(shè)置計(jì)時(shí) setTimeout 或者 setInterval,或者發(fā)起網(wǎng)絡(luò)請(qǐng)求。
14、這個(gè)函數(shù)也是只被調(diào)用一次。
15、這個(gè)函數(shù)之后,就進(jìn)入了穩(wěn)定運(yùn)行狀態(tài),等待事件觸發(fā)。
16、 componentWillReceiveProps 如果組件收到新的屬性(props),就會(huì)調(diào)用 componentWillReceiveProps(),其原型如下: void componentWillReceiveProps( object nextProps ) 輸入?yún)?shù) nextProps 是即將被設(shè)置的屬性,舊的屬性還是可以通過 this.props 來獲取。
17、在這個(gè)回調(diào)函數(shù)里面,你可以根據(jù)屬性的變化,通過調(diào)用 this.setState() 來更新你的組件狀態(tài),這里調(diào)用更新狀態(tài)是安全的,并不會(huì)觸發(fā)額外的 render() 調(diào)用。
18、如下: componentWillReceiveProps: function(nextProps) { this.setState({ likesIncreasing: nextProps.likeCount > this.props.likeCount }); } shouldComponentUpdate 當(dāng)組件接收到新的屬性和狀態(tài)改變的話,都會(huì)觸發(fā)調(diào)用 shouldComponentUpdate(...),函數(shù)原型如下: boolean shouldComponentUpdate( object nextProps, object nextState ) 輸入?yún)?shù) nextProps 和上面的 componentWillReceiveProps 函數(shù)一樣,nextState 表示組件即將更新的狀態(tài)值。
19、這個(gè)函數(shù)的返回值決定是否需要更新組件,如果 true 表示需要更新,繼續(xù)走后面的更新流程。
20、否者,則不更新,直接進(jìn)入等待狀態(tài)。
21、 默認(rèn)情況下,這個(gè)函數(shù)永遠(yuǎn)返回 true 用來保證數(shù)據(jù)變化的時(shí)候 UI 能夠同步更新。
22、在大型項(xiàng)目中,你可以自己重載這個(gè)函數(shù),通過檢查變化前后屬性和狀態(tài),來決定 UI 是否需要更新,能有效提高應(yīng)用性能。
23、 componentWillUpdate 如果組件狀態(tài)或者屬性改變,并且上面的 shouldComponentUpdate(...) 返回為 true,就會(huì)開始準(zhǔn)更新組件,并調(diào)用 componentWillUpdate(),其函數(shù)原型如下: void componentWillUpdate( object nextProps, object nextState ) 輸入?yún)?shù)與 shouldComponentUpdate 一樣,在這個(gè)回調(diào)中,可以做一些在更新界面之前要做的事情。
24、需要特別注意的是,在這個(gè)函數(shù)里面,你就不能使用 this.setState 來修改狀態(tài)。
25、這個(gè)函數(shù)調(diào)用之后,就會(huì)把 nextProps 和 nextState 分別設(shè)置到 this.props和 this.state 中。
26、緊接著這個(gè)函數(shù),就會(huì)調(diào)用 render() 來更新界面了。
27、 componentDidUpdate 調(diào)用了 render() 更新完成界面之后,會(huì)調(diào)用 componentDidUpdate() 來得到通知,其函數(shù)原型如下: void componentDidUpdate( object prevProps, object prevState ) 因?yàn)榈竭@里已經(jīng)完成了屬性和狀態(tài)的更新了,此函數(shù)的輸入?yún)?shù)變成了 prevProps 和 prevState。
28、 componentWillUnmount 當(dāng)組件要被從界面上移除的時(shí)候,就會(huì)調(diào)用 componentWillUnmount(),其函數(shù)原型如下: void componentWillUnmount() 在這個(gè)函數(shù)中,可以做一些組件相關(guān)的清理工作,例如取消計(jì)時(shí)器、網(wǎng)絡(luò)請(qǐng)求等。
29、 總結(jié) 到這里,RN 的組件的完整的生命都介紹完了,在回頭來看一下前面的圖,就比較清晰了,把生命周期的回調(diào)函數(shù)總結(jié)成如下表格: 生命周期 調(diào)用次數(shù) 能否使用 setSate() getDefaultProps 1(全局調(diào)用一次) 否 getInitialState 1 否 componentWillMount 1 是 render >=1 否 componentDidMount 1 是 componentWillReceiveProps >=0 是 shouldComponentUpdate >=0 否 componentWillUpdate >=0 否 componentDidUpdate >=0 否 componentWillUnmount 1 否 以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
本文到此分享完畢,希望對(duì)大家有所幫助。
免責(zé)聲明:本文由用戶上傳,與本網(wǎng)站立場無關(guān)。財(cái)經(jīng)信息僅供讀者參考,并不構(gòu)成投資建議。投資者據(jù)此操作,風(fēng)險(xiǎn)自擔(dān)。 如有侵權(quán)請(qǐng)聯(lián)系刪除!
-
安徽淮南長安獵手K50作為一款備受關(guān)注的皮卡車型,其2025款在配置和性能上都有所升級(jí)。對(duì)于想要購買這款車的消...瀏覽全文>>
-
安徽阜陽的大眾高爾夫GTI作為一款備受年輕消費(fèi)者喜愛的性能車型,其價(jià)格和配置一直是大家關(guān)注的重點(diǎn)。高爾夫GT...瀏覽全文>>
-
近年來,新能源汽車市場發(fā)展迅猛,大眾品牌憑借其深厚的技術(shù)積累和可靠的產(chǎn)品品質(zhì),在國內(nèi)市場上占據(jù)了重要地...瀏覽全文>>
-
QQ多米作為一款備受關(guān)注的小型車,憑借其時(shí)尚的外觀設(shè)計(jì)和實(shí)用的配置,吸引了眾多消費(fèi)者的關(guān)注。為了幫助大家...瀏覽全文>>
-
隨著新能源汽車市場的持續(xù)升溫,上汽大眾ID 6 X憑借其寬敞的7座空間和出色的續(xù)航能力,成為不少家庭用戶的關(guān)...瀏覽全文>>
-
淮南途銳新能源2024款車型以其卓越的性能和環(huán)保特性吸引了眾多消費(fèi)者的關(guān)注。作為一款高端插電式混合動(dòng)力SUV,...瀏覽全文>>
-
近年來,隨著新能源汽車的普及和政策支持的不斷加大,越來越多消費(fèi)者將目光投向了插電混動(dòng)車型。作為一款備受...瀏覽全文>>
-
2025款生活家PHEV作為一款備受關(guān)注的新能源車型,憑借其出色的性能和環(huán)保特性,吸引了眾多消費(fèi)者的目光。在購...瀏覽全文>>
-
長安汽車旗下高端新能源品牌——啟源,在2024款新車的推出中再次吸引了廣泛關(guān)注。作為該品牌的旗艦車型之一,...瀏覽全文>>
-
近年來,新能源汽車市場持續(xù)火熱,各大品牌紛紛推出新款車型以滿足消費(fèi)者需求。在眾多選擇中,2025款安徽池州I...瀏覽全文>>
- iPhone用戶現(xiàn)在可以通過iOS18.1更新更改其Apple帳戶的主要電子郵件地址
- 當(dāng)你看到T-Mobile用戶贏得手機(jī)手表和耳機(jī)時(shí)你會(huì)羨慕不已
- Ubuntu24.10OracularOriole推出最新內(nèi)核工具鏈GNOME47和增強(qiáng)的安全性
- 搭載M4的MacBookPro在Cinebench上擊敗了CoreUltra9288V和Ryzen9AI370HX
- EarFun推出功能強(qiáng)大的159美元UBoomX便攜式揚(yáng)聲器
- iPhone16Pro iPhone16ProMax表現(xiàn)優(yōu)于基本機(jī)型扭轉(zhuǎn)了之前的趨勢
- Waze迎來魔獸世界改版
- SquareEnix將心愛的RPG移植到MetaQuest3
- 蘋果正在設(shè)計(jì)全新操作系統(tǒng)瞄準(zhǔn)新類別的產(chǎn)品
- 小米R(shí)edmiA27U顯示器采用4K面板和90WUSBC端口
- QQ多米落地價(jià),各配置車型售價(jià)一目了然
- 生活家PHEV多少錢?購車攻略在此
- 現(xiàn)代伊蘭特試駕,暢享豪華駕乘,體驗(yàn)卓越性能
- 試駕領(lǐng)克03,從預(yù)約到試駕的完美旅程
- QQ多米最新價(jià)格2025款,各配置車型售價(jià)全揭曉,性價(jià)比之王
- 淮北途觀L多少錢 2025款落地價(jià),價(jià)格再創(chuàng)新低,性價(jià)比爆棚
- 山東濟(jì)南帕薩特新能源新款價(jià)格2025款多少錢?最低售價(jià)17.715萬起,性價(jià)比大揭秘
- SWM斯威G01FF新款價(jià)格2024款多少錢?看完這篇購車攻略再做決定
- 淮南ID.4 X價(jià)格,最低售價(jià)13.9888萬起,價(jià)格再創(chuàng)新低
- 滁州途鎧多少錢 2023款落地價(jià)與配置的完美平衡
- 蘋果將為iPhone17系列采用新電池技術(shù)
- Adobe推出PhotoshopElements和PremiereElements2025取消Elements軟件的永久許可
- AppleiPhoneSE4將配備更新的OLED顯示屏
- InfinixZeroFlip首次亮相作為新款可折疊Android智能手機(jī)其價(jià)格低于摩托羅拉Razr2024
- OnePlus13型號(hào) 充電規(guī)格在最新泄漏中被登記
- Insta360AcePro2主要規(guī)格終于泄露GoPro和DJI運(yùn)動(dòng)相機(jī)競爭對(duì)手將配備50MP傳感器5nm和2倍數(shù)碼變焦
- XboxElite無線控制器系列2通過Xbox設(shè)計(jì)實(shí)驗(yàn)室獲得透明面板
- 索尼INZONEM10S華碩ROGSwiftOLEDPG27AQDP新品上市但售價(jià)更高
- 谷歌終止PixelBuds的點(diǎn)擊通知功能
- 谷歌正在努力完善iOS中缺少的RCS支持重要功能
- 對(duì)AppleIntelligence功能的評(píng)價(jià)從一般到還可以
- GalaxyS25Plus看起來很時(shí)髦但三星是否選擇像iPhone一樣的通用設(shè)計(jì)
- 優(yōu)質(zhì)48英寸三星S90DOLED電視在亞馬遜上降至歷史最低價(jià)同時(shí)贈(zèng)送100美元Xbox禮品卡和1年保護(hù)計(jì)劃
- AOC推出四款新型游戲顯示器具有快速刷新率和低價(jià)格
- Valve出售部分SteamDeck型號(hào)-GBLCD型號(hào)售價(jià)296.65美元512GBLCD型號(hào)售價(jià)336.75美元
- Beats在其產(chǎn)品線中增加了手機(jī)保護(hù)殼推出適用于iPhone16系列的MagSafe保護(hù)殼
- 三星在IFA2024上展示AI產(chǎn)品
- 新的AIPlaygroundDesign工具你可以簡單地與之交談就像ChatGPT一樣
- 極簡主義Linux發(fā)行版Peropesis2.7附帶存檔和ISO管理工具
- GAMEBABY控制器和外殼混合套裝現(xiàn)已接受預(yù)訂