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