欧美在线视频二区-欧美亚洲另类在线视频-欧美色图12p-日韩另类在线-青娱乐激情视频-亚洲最大天堂网-91精品国产高清一区二区三密臀-av大片在线观看-国产精品自拍99-国产精品色婷婷99久久精品-亚洲视频免费-91视频福利-国产成人亚洲影院在线观看-国产自在自线午夜精品-亚洲一区二区久久-中国一级免费毛片-国产免费www

當(dāng)前位置: 首頁(yè) > 綜合 >

每日時(shí)訊!react生命周期圖 react生命周期

2023-06-27 04:12:52 來(lái)源:城市網(wǎng)

1、概述 就像 Android 開(kāi)發(fā)中的 View 一樣,React Native(RN) 中的組件也有生命周期(Lifecycle)。


【資料圖】

2、所謂生命周期,就是一個(gè)對(duì)象從開(kāi)始生成到最后消亡所經(jīng)歷的狀態(tài),理解生命周期,是合理開(kāi)發(fā)的關(guān)鍵。

3、RN 組件的生命周期整理如下圖: 如圖,可以把組件生命周期大致分為三個(gè)階段: 第一階段:是組件第一次繪制階段,如圖中的上面虛線框內(nèi),在這里完成了組件的加載和初始化; 第二階段:是組件在運(yùn)行和交互階段,如圖中左下角虛線框,這個(gè)階段組件可以處理用戶交互,或者接收事件更新界面; 第三階段:是組件卸載消亡的階段,如圖中右下角的虛線框中,這里做一些組件的清理工作。

4、 生命周期回調(diào)函數(shù) 下面來(lái)詳細(xì)介紹生命周期中的各回調(diào)函數(shù)。

5、 getDefaultProps 在組件創(chuàng)建之前,會(huì)先調(diào)用 getDefaultProps(),這是全局調(diào)用一次,嚴(yán)格地來(lái)說(shuō),這不是組件的生命周期的一部分。

6、在組件被創(chuàng)建并加載候,首先調(diào)用 getInitialState(),來(lái)初始化組件的狀態(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ù)開(kāi)始獲取其中的元素或者子組件了。

12、需要注意的是,RN 框架是先調(diào)用子組件的 componentDidMount(),然后調(diào)用父組件的函數(shù)。

13、從這個(gè)函數(shù)開(kāi)始,就可以和 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è)置的屬性,舊的屬性還是可以通過(guò) this.props 來(lái)獲取。

17、在這個(gè)回調(diào)函數(shù)里面,你可以根據(jù)屬性的變化,通過(guò)調(diào)用 this.setState() 來(lái)更新你的組件狀態(tài),這里調(diào)用更新?tīng)顟B(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 用來(lái)保證數(shù)據(jù)變化的時(shí)候 UI 能夠同步更新。

22、在大型項(xiàng)目中,你可以自己重載這個(gè)函數(shù),通過(guò)檢查變化前后屬性和狀態(tài),來(lái)決定 UI 是否需要更新,能有效提高應(yīng)用性能。

23、 componentWillUpdate 如果組件狀態(tài)或者屬性改變,并且上面的 shouldComponentUpdate(...) 返回為 true,就會(huì)開(kāi)始準(zhǔn)更新組件,并調(diào)用 componentWillUpdate(),其函數(shù)原型如下: void componentWillUpdate( object nextProps, object nextState ) 輸入?yún)?shù)與 shouldComponentUpdate 一樣,在這個(gè)回調(diào)中,可以做一些在更新界面之前要做的事情。

24、需要特別注意的是,在這個(gè)函數(shù)里面,你就不能使用 this.setState 來(lái)修改狀態(tài)。

25、這個(gè)函數(shù)調(diào)用之后,就會(huì)把 nextProps 和 nextState 分別設(shè)置到 this.props和 this.state 中。

26、緊接著這個(gè)函數(shù),就會(huì)調(diào)用 render() 來(lái)更新界面了。

27、 componentDidUpdate 調(diào)用了 render() 更新完成界面之后,會(huì)調(diào)用 componentDidUpdate() 來(lái)得到通知,其函數(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 的組件的完整的生命都介紹完了,在回頭來(lái)看一下前面的圖,就比較清晰了,把生命周期的回調(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 否 以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相信通過(guò)react生命周期這篇文章能幫到你,在和好朋友分享的時(shí)候,也歡迎感興趣小伙伴們一起來(lái)探討。

本文由用戶上傳,如有侵權(quán)請(qǐng)聯(lián)系刪除!
標(biāo)簽:
最近更新
15037178970
婚姻法
跑腿買藥可以用醫(yī)保嗎?代購(gòu)銷售藥是否違法? 觀熱點(diǎn)
微頭條丨輕傷派出所抓人要多久需要根據(jù)具體情況確定嗎?
一般要提供哪些材料呢?起訴離婚如何進(jìn)行舉證?起訴離婚應(yīng)符合哪些條件? 全球快資訊
走私犯罪中的幫助可以量刑折合嗎?量刑建議書和實(shí)際判刑差距大嗎?
肯定屬于夫妻一方的財(cái)產(chǎn)有哪些(哪些是夫妻共同財(cái)產(chǎn))
債務(wù)人抗辯權(quán)的種類有哪些?可抗辯權(quán)有什么法律依據(jù)是什么?|世界報(bào)資訊
天天消息!醫(yī)療事故鑒定是必須做的嗎?受害人是否必須做傷情鑒定?
天天觀點(diǎn):劃撥土地房屋過(guò)戶交多少稅費(fèi)?劃撥土地使用權(quán)取得的適用范圍有哪些?
關(guān)于醫(yī)療事故鑒定有多久時(shí)效?什么是醫(yī)療事故鑒定書? 每日動(dòng)態(tài)
環(huán)球觀天下!勞動(dòng)合同應(yīng)當(dāng)具備哪些條款?協(xié)議書的合同的內(nèi)容要有哪些?
知識(shí)糾紛
1 判斷一個(gè)行政行為合法與否要滿足的要求有哪些? 世界看熱訊
2 播報(bào):委托辯護(hù)人有什么要求呢?被告人有權(quán)隨時(shí)委托辯護(hù)人嗎?
3 天天觀天下!一般情況失蹤人口超過(guò)24小時(shí)可以報(bào)案嗎?報(bào)案的主體是誰(shuí)?
4 過(guò)期食品處罰標(biāo)準(zhǔn)是什么?食品過(guò)期怎么處理? 焦點(diǎn)要聞
5 法醫(yī)鑒定程序是怎么樣的?司法鑒定程序通則第十一條的內(nèi)容是什么?_環(huán)球動(dòng)態(tài)
6 全球今頭條!什么是本金歸還?二手房過(guò)戶需注意的問(wèn)題有哪些?
7 辦理股權(quán)質(zhì)押登記需要什么資料?質(zhì)權(quán)人可就出質(zhì)股權(quán)的價(jià)值優(yōu)先受償嗎?
8 網(wǎng)購(gòu)糾紛的訴訟時(shí)效多久?一般法院網(wǎng)絡(luò)購(gòu)物糾紛開(kāi)庭嗎?
公司法
工商營(yíng)業(yè)執(zhí)照申請(qǐng)流程是什么?辦理營(yíng)業(yè)執(zhí)照需要的材料是什么? 世界聚焦
停工留薪期不可以取代年休假嗎?停工留薪期一般不超過(guò)多少個(gè)月? 世界短訊
所有權(quán)的特征是什么?所有權(quán)是一種什么權(quán)利?|天天視訊
全球最資訊丨結(jié)婚登記的程序可分為哪些步驟?婚姻登記機(jī)關(guān)亂收費(fèi)會(huì)怎么樣呢?
簽了協(xié)議未辦離婚手續(xù)協(xié)議是否有效呢?離婚協(xié)議書是夫妻雙方離婚時(shí)一個(gè)必要的法律文件嗎?
環(huán)球快播:吃國(guó)家二級(jí)保護(hù)動(dòng)物判幾年?涉嫌非法獵捕怎么判刑?
視點(diǎn)!變更子女撫養(yǎng)關(guān)系的應(yīng)另行起訴?變更子女撫養(yǎng)的條件是什么?
全球快看點(diǎn)丨可要求賣家賠償?shù)膬?nèi)容有什么?遇到一房二賣的情形怎么維權(quán)?
涉嫌律師偽證罪怎么處罰?偽證罪的立案標(biāo)準(zhǔn)是什么?
打遺產(chǎn)繼承官司律師怎么收費(fèi)?想打遺產(chǎn)繼承原告都要什么證明?
合同法
離婚夫妻共同財(cái)產(chǎn)怎么分?離婚共同財(cái)產(chǎn)怎樣認(rèn)定?|世界微頭條

2023-06-25

進(jìn)出口公司經(jīng)營(yíng)范圍有哪些?進(jìn)出口貿(mào)易流程您了解嗎?|環(huán)球熱議

2023-06-25

股份制公司成立的條件有什么?中華人民共和國(guó)公司法第七十六條是什么?

2023-06-25

【世界報(bào)資訊】可以領(lǐng)取養(yǎng)老金的標(biāo)準(zhǔn)條件是什么?中華人民共和國(guó)社會(huì)保險(xiǎn)法第十七條內(nèi)容是什么?

2023-06-25

我國(guó)軍婚的條件是什么?結(jié)婚的適用范圍有哪些?

2023-06-25

法律監(jiān)督機(jī)關(guān)是指什么部門?人民檢察院職能職權(quán)有哪些?

2023-06-21

勞動(dòng)糾紛
離婚夫妻共同財(cái)產(chǎn)怎么分?離婚共同財(cái)產(chǎn)怎樣認(rèn)定?|世界微頭條
進(jìn)出口公司經(jīng)營(yíng)范圍有哪些?進(jìn)出口貿(mào)易流程您了解嗎?|環(huán)球熱議
股份制公司成立的條件有什么?中華人民共和國(guó)公司法第七十六條是什么?
【世界報(bào)資訊】可以領(lǐng)取養(yǎng)老金的標(biāo)準(zhǔn)條件是什么?中華人民共和國(guó)社會(huì)保險(xiǎn)法第十七條內(nèi)容是什么?
我國(guó)軍婚的條件是什么?結(jié)婚的適用范圍有哪些?
法律監(jiān)督機(jī)關(guān)是指什么部門?人民檢察院職能職權(quán)有哪些?

法律解答網(wǎng)版權(quán)所有 2005-2022

備案號(hào):京ICP備2022016840號(hào)-54 聯(lián)系qq:920 891 263 @qq.com

海口市| 宜章县| 康定县| 淄博市| 沛县| 甘南县| 穆棱市| 焉耆| 获嘉县| 文安县| 奉化市| 外汇| 体育| 江达县| 鹤庆县| 镇巴县| 新邵县| 来凤县| 沂水县| 孝义市| 稷山县| 衡山县| 襄城县| 康保县| 海盐县| 东辽县| 芜湖市| 乳源| 大洼县| 梅河口市| 横山县| 布拖县| 兴宁市| 托克逊县| 承德县| 天门市| 汶川县| 滦平县| 垫江县| 花莲市| 古蔺县|