最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談React Native 中組件的生命周期

 更新時(shí)間:2017年09月08日 11:27:01   作者:北方人在上海  
本篇文章主要介紹了淺談React Native 中組件的生命周期,非常具有實(shí)用價(jià)值,需要的朋友可以參考下

概述

就像 Android 開(kāi)發(fā)中的 View 一樣,React Native(RN) 中的組件也有生命周期(Lifecycle)。所謂生命周期,就是一個(gè)對(duì)象從開(kāi)始生成到最后消亡所經(jīng)歷的狀態(tài),理解生命周期,是合理開(kāi)發(fā)的關(guān)鍵。RN 組件的生命周期整理如下圖:

如圖,可以把組件生命周期大致分為三個(gè)階段:

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

生命周期回調(diào)函數(shù)

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

getDefaultProps

在組件創(chuàng)建之前,會(huì)先調(diào)用 getDefaultProps(),這是全局調(diào)用一次,嚴(yán)格地來(lái)說(shuō),這不是組件的生命周期的一部分。在組件被創(chuàng)建并加載候,首先調(diào)用 getInitialState(),來(lái)初始化組件的狀態(tài)。

componentWillMount

然后,準(zhǔn)備加載組件,會(huì)調(diào)用 componentWillMount(),其原型如下:

void componentWillMount() 

這個(gè)函數(shù)調(diào)用時(shí)機(jī)是在組件創(chuàng)建,并初始化了狀態(tài)之后,在第一次繪制 render() 之前??梢栽谶@里做一些業(yè)務(wù)初始化操作,也可以設(shè)置組件狀態(tài)。這個(gè)函數(shù)在整個(gè)生命周期中只被調(diào)用一次。

componentDidMount

在組件第一次繪制之后,會(huì)調(diào)用 componentDidMount(),通知組件已經(jīng)加載完成。函數(shù)原型如下:

void componentDidMount() 

這個(gè)函數(shù)調(diào)用的時(shí)候,其虛擬 DOM 已經(jīng)構(gòu)建完成,你可以在這個(gè)函數(shù)開(kāi)始獲取其中的元素或者子組件了。需要注意的是,RN 框架是先調(diào)用子組件的 componentDidMount(),然后調(diào)用父組件的函數(shù)。從這個(gè)函數(shù)開(kāi)始,就可以和 JS 其他框架交互了,例如設(shè)置計(jì)時(shí) setTimeout 或者 setInterval,或者發(fā)起網(wǎng)絡(luò)請(qǐng)求。這個(gè)函數(shù)也是只被調(diào)用一次。這個(gè)函數(shù)之后,就進(jìn)入了穩(wěn)定運(yùn)行狀態(tài),等待事件觸發(fā)。

componentWillReceiveProps

如果組件收到新的屬性(props),就會(huì)調(diào)用 componentWillReceiveProps(),其原型如下:

void componentWillReceiveProps( 
 object nextProps
)

輸入?yún)?shù) nextProps 是即將被設(shè)置的屬性,舊的屬性還是可以通過(guò) this.props 來(lái)獲取。在這個(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)用。如下:

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)值。這個(gè)函數(shù)的返回值決定是否需要更新組件,如果 true 表示需要更新,繼續(xù)走后面的更新流程。否者,則不更新,直接進(jìn)入等待狀態(tài)。

默認(rèn)情況下,這個(gè)函數(shù)永遠(yuǎn)返回 true 用來(lái)保證數(shù)據(jù)變化的時(shí)候 UI 能夠同步更新。在大型項(xiàng)目中,你可以自己重載這個(gè)函數(shù),通過(guò)檢查變化前后屬性和狀態(tài),來(lái)決定 UI 是否需要更新,能有效提高應(yīng)用性能。

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)中,可以做一些在更新界面之前要做的事情。需要特別注意的是,在這個(gè)函數(shù)里面,你就不能使用 this.setState 來(lái)修改狀態(tài)。這個(gè)函數(shù)調(diào)用之后,就會(huì)把 nextProps 和 nextState 分別設(shè)置到 this.props和 this.state 中。緊接著這個(gè)函數(shù),就會(huì)調(diào)用 render() 來(lái)更新界面了。

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。

componentWillUnmount

當(dāng)組件要被從界面上移除的時(shí)候,就會(huì)調(diào)用 componentWillUnmount(),其函數(shù)原型如下:

void componentWillUnmount() 

在這個(gè)函數(shù)中,可以做一些組件相關(guān)的清理工作,例如取消計(jì)時(shí)器、網(wǎng)絡(luò)請(qǐng)求等。

總結(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ān)文章

  • React+TS+IntersectionObserver實(shí)現(xiàn)視頻懶加載和自動(dòng)播放功能

    React+TS+IntersectionObserver實(shí)現(xiàn)視頻懶加載和自動(dòng)播放功能

    通過(guò)本文的介紹,我們學(xué)習(xí)了如何使用 React + TypeScript 和 IntersectionObserver API 來(lái)實(shí)現(xiàn)一個(gè)視頻播放控制組件,該組件具有懶加載功能,只有在用戶滾動(dòng)頁(yè)面且視頻進(jìn)入視口時(shí)才開(kāi)始下載視頻資源,需要的朋友可以參考下
    2023-04-04
  • react-router-dom 嵌套路由的實(shí)現(xiàn)

    react-router-dom 嵌套路由的實(shí)現(xiàn)

    這篇文章主要介紹了react-router-dom 嵌套路由的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 十分鐘帶你快速了解React16新特性

    十分鐘帶你快速了解React16新特性

    這篇文章主要介紹了十分鐘帶你快速了解React16新特性,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • React實(shí)現(xiàn)類似于Vue中的插槽的項(xiàng)目實(shí)踐

    React實(shí)現(xiàn)類似于Vue中的插槽的項(xiàng)目實(shí)踐

    本文主要介紹了React實(shí)現(xiàn)類似于Vue中的插槽的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 在react-router4中進(jìn)行代碼拆分的方法(基于webpack)

    在react-router4中進(jìn)行代碼拆分的方法(基于webpack)

    這篇文章主要介紹了在react-router4中進(jìn)行代碼拆分的方法(基于webpack),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • 關(guān)于React動(dòng)態(tài)修改元素樣式的三種方式

    關(guān)于React動(dòng)態(tài)修改元素樣式的三種方式

    這篇文章主要介紹了關(guān)于React動(dòng)態(tài)修改元素樣式的三種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 詳解React中常見(jiàn)的三種路由處理方式選擇

    詳解React中常見(jiàn)的三種路由處理方式選擇

    這篇文章主要為大家詳細(xì)介紹了React中常見(jiàn)的三種路由處理方式該如何選擇,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • react?redux的原理以及基礎(chǔ)使用講解

    react?redux的原理以及基礎(chǔ)使用講解

    這篇文章主要介紹了react?redux的原理以及基礎(chǔ)使用講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 詳解使用create-react-app快速構(gòu)建React開(kāi)發(fā)環(huán)境

    詳解使用create-react-app快速構(gòu)建React開(kāi)發(fā)環(huán)境

    這篇文章主要介紹了詳解使用create-react-app快速構(gòu)建React開(kāi)發(fā)環(huán)境,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • react+ts實(shí)現(xiàn)簡(jiǎn)單jira項(xiàng)目的最佳實(shí)踐記錄

    react+ts實(shí)現(xiàn)簡(jiǎn)單jira項(xiàng)目的最佳實(shí)踐記錄

    這篇文章主要介紹了react+ts實(shí)現(xiàn)簡(jiǎn)單jira項(xiàng)目,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07

最新評(píng)論

读书| 屯留县| 安陆市| 苏尼特右旗| 栾川县| 洪雅县| 修文县| 临湘市| 平舆县| 枣阳市| 宿松县| 长泰县| 休宁县| 台南县| 秦安县| 申扎县| 渝北区| 泗洪县| 宁城县| 康乐县| 大厂| 县级市| 丰城市| 绩溪县| 四平市| 都江堰市| 平顶山市| 凤山县| 辽宁省| 桑日县| 抚松县| 那坡县| 玛多县| 射洪县| 镇沅| 紫云| 分宜县| 竹北市| 新龙县| 白沙| 呼玛县|