React Native 組件的生命周期

一鞠值、如圖引几,該圖描述了React Native 組件的生命周期芭毙。

image.png

React Native組件的生命周期大致上可以劃分為實例化階段逃魄、存在階段和銷毀階段荤西,其中最常用的為實例化階段,該階段就是組件的構(gòu)建伍俘、展示時期邪锌,需要我們根據(jù)幾個函數(shù)的調(diào)用過程,控制好組件的展示和邏輯的處理癌瘾。

二觅丰、實例化階段函數(shù)功能分析

    getDefaultProps
該函數(shù)用于初始化一些默認的屬性,通常會將固定的內(nèi)容放在這個函數(shù) 中進行初始化和賦值妨退;
在組件中妇萄,可以利用this.props獲取在這里初始化它的屬性,由于組件初始化后咬荷,再次使用該組件不會調(diào)用getDefaultProps函數(shù)冠句,所以組件自己不可以自己修改props(即:props可認為是只讀的),只可由其他組件調(diào)用它時在外部修改幸乒。
  getInitialState
   該函數(shù)是用于對組件的一些狀態(tài)進行初始化懦底;
   由于該函數(shù)不同于getDefaultProps,在以后的過程中罕扎,會再次調(diào)用基茵,所以可以將控制控件的狀態(tài)的一些變量放在這里初始化,如控件上顯示的文字壳影,可以通過this.state來獲取值拱层,通過this.setState來修改state值, 比如:

this.setState({
selectIndex: selectIndex,
currentY: contentOffSetY
});
注意:一旦調(diào)用了this.setState方法宴咧,組件一定會調(diào)用render方法根灯,對組件進行再次的渲染,不過掺栅,如果React框架會自動根據(jù)DOM的狀態(tài)來判斷是否需要真正的渲染烙肺。

    componentWillMount
相當于OC中的ViewWillAppear方法,在組件將要被加載在視圖上之前調(diào)用氧卧,功能相對較少桃笙。
    render
  render是一個組件中必須有的方法,本質(zhì)上是一個函數(shù)沙绝,并返回JSX或其他組件來構(gòu)成DOM搏明,和Android的XML布局類似鼠锈,注意:只能返回一個頂級元素 ;
   此外,在render函數(shù)中星著,只可通過this.state和this.props來訪問在之前函數(shù)中初始化的數(shù)據(jù)值 购笆。
componentDidMount
   在調(diào)用了render方法后,組件加載成功并被成功渲染出來以后虚循,所要執(zhí)行的后續(xù)操作同欠,一般會在這個函數(shù)中處理網(wǎng)絡(luò)請求等加載數(shù)據(jù)的操作;
   因為UI已經(jīng)成功被渲染出來横缔, 所以放在這個函數(shù)里進行請求操作铺遂,不會出現(xiàn)UI上的錯誤。
  下面的代碼是利用了fetch API來異步請求Web API來加載數(shù)據(jù):
  componentDidMount(){
    this.loadData();
  }

  loadData(){
    fetch('https://facebook.github.io/react-native/movies.json')
    .then((response) => response.json())
    .then((responseJson) => {
      return responseJson.movies;
    })
    .catch((error) => {
      console.error(error);
    });
  }

三茎刚、存在期階段函數(shù)功能分析

componentWillReceiveProps    

指父元素對組件的props或state進行了修改

shouldComponentUpdate    

一般用于優(yōu)化娃循,可以返回false或true來控制是否進行渲染

componentWillUpdate

組件刷新前調(diào)用,類似componentWillMount

componentDidUpdate

更新后的hook
四斗蒋、銷毀期階段函數(shù)功能分析
用于清理一些無用的內(nèi)容捌斧,如:點擊事件Listener,只有一個過程:componentWillUnmount

五泉沾、常用知識點分析
5.1 this.state
開發(fā)中組件免不了要與用戶互動捞蚂,React 的一大創(chuàng)新,就是將組件看成是一個狀態(tài)機跷究,一開始有一個初始狀態(tài)姓迅,然后用戶互動,導(dǎo)致狀態(tài)變化俊马,從而觸發(fā)重新渲染 UI丁存。
舉個例子:

constructor(props) {
    super(props);
    this.isGoodeGuy = true;
    this.state = {
      content:'what a person are you ?'
    };
  }
  render() {
    return (
      <View style={styles.container}>
        <TouchableOpacity onPress={()=>{
          this.setState({content:this.isGoodeGuy?'好人':'爛人'})
        }}>
          <Text>{this.state.content}</Text>
        </TouchableOpacity>
      </View>
    );
  }
   當用戶點擊組件,導(dǎo)致狀態(tài)變化柴我,this.setState 方法就修改狀態(tài)值解寝,每次修改以后,自動調(diào)用 this.render 方法艘儒,再次渲染組件聋伦。

  可以把組件看成一個“狀態(tài)機”. 根據(jù)不同的status有不同的UI展示。只要使用setState改變狀態(tài)值界睁,根據(jù)diff算法算出來有差以后觉增,就會執(zhí)行ReactDom的render方法,重新渲染頁面翻斟。

   注意:由于 this.props 和 this.state 都用于描述組件的特性逾礁,可能會產(chǎn)生混淆。一個簡單的區(qū)分方法是访惜,this.props 表示那些一旦定義嘹履,就不再改變的特性腻扇,而 this.state 是會隨著用戶互動而產(chǎn)生變化的特性。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末植捎,一起剝皮案震驚了整個濱河市衙解,隨后出現(xiàn)的幾起案子阳柔,更是在濱河造成了極大的恐慌焰枢,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舌剂,死亡現(xiàn)場離奇詭異济锄,居然都是意外死亡,警方通過查閱死者的電腦和手機霍转,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門荐绝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人避消,你說我怎么就攤上這事低滩。” “怎么了岩喷?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵恕沫,是天一觀的道長。 經(jīng)常有香客問我纱意,道長婶溯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任偷霉,我火速辦了婚禮迄委,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘类少。我一直安慰自己叙身,他們只是感情好,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布硫狞。 她就那樣靜靜地躺著曲梗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪妓忍。 梳的紋絲不亂的頭發(fā)上虏两,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天,我揣著相機與錄音世剖,去河邊找鬼定罢。 笑死,一個胖子當著我的面吹牛旁瘫,可吹牛的內(nèi)容都是我干的祖凫。 我是一名探鬼主播琼蚯,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼惠况!你這毒婦竟也來了遭庶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤稠屠,失蹤者是張志新(化名)和其女友劉穎峦睡,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體权埠,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡榨了,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了攘蔽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片龙屉。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖满俗,靈堂內(nèi)的尸體忽然破棺而出转捕,到底是詐尸還是另有隱情,我是刑警寧澤唆垃,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布五芝,位于F島的核電站,受9級特大地震影響降盹,放射性物質(zhì)發(fā)生泄漏与柑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一蓄坏、第九天 我趴在偏房一處隱蔽的房頂上張望价捧。 院中可真熱鬧,春花似錦涡戳、人聲如沸结蟋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嵌屎。三九已至,卻和暖如春恍涂,著一層夾襖步出監(jiān)牢的瞬間宝惰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工再沧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留尼夺,地道東北人。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像淤堵,于是被迫代替她去往敵國和親寝衫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容