1. 程式人生 > >React Native入門——元件構成及生命週期簡介

React Native入門——元件構成及生命週期簡介

剛開始接觸React Native開發的程式猿可能會拿著網上的例子和文件一頭霧水,畢竟不是像C語言有個main、Android有個OnCreate,iOS有個ViewDidLoad那樣,加上JavaScript語法的隨意性,讓很多人無從下手,本文主要介紹React Native元件的結構和生命週期,幫助讀者理解一個React Native元件如何進行展示,如何進行開發。

1.元件的構成

在React Native專案中,所有展示的介面,都可以看做是一個元件(Component)只是功能和邏輯上的複雜程度不同。每一個是許許多多小的元件拼成的,每個小的元件也有自己對應的邏輯,不過他們都遵循同樣的程式碼結構,由以下幾個部分組成

第一是包和其他元件引用部分,如下圖:


新版本的React Native已經變成了如下形式:


此部分首先會利用Node.js的require機制引入react-native這個包,接著會在var { } = React;的程式碼結構中引用來自React Native官方的元件(其中AppRegistry和StyleSheet比較重要)、API以及第三方或開發者專案中構建的元件,形式為該元件或API的React類名,當然,由於React Native利用了Node.js實現,還可以使用require引入其他可用的Node.js包,如:jssha(一個js雜湊演算法包),以供後面的程式碼進行使用。

第二部分是元件類的宣告,如圖:


新版形式:


此部分用於構造元件的狀態和具體的展示結構,利用React.createClass()來例項化一個React Native元件物件,其中會包含元件的幾個重要的生命週期(下文會講到),其中render屬性對應的函式會返回一段JSX來表示該元件的結構和佈局。該部分是一個元件必不可少的地方,沒有這些內容,就無法構成一個元件。

第三部分是該元件的樣式宣告,如圖:


新版形式:


該部分使用StyleSheet.create來例項化樣式物件,其中的內容為JSON形式的React Native樣式,該樣式來源於CSS3,並將其欄位規範為標準的首字母小寫駝峰式命名,這些宣告的樣式可供開發者在構建元件的展示時(JSX程式碼中)進行使用(直接寫入JSX也可,但影響可讀性)。

2.生命週期

一個React Native元件的生命週期分為例項化、存在期和銷燬期,其中最常用的為例項化期,該時期即元件的構建、展示時期,需要開發者根據幾個函式的呼叫過程,控制好元件的展示和邏輯的處理。

(1)例項化期分為5個階段,每個階段以一個函式來進行控制,具體如下:


getDefaultProps:顧名思義,這裡會初始化一些預設的屬性,通常會將固定的內容放在這個過程中進行初始化和賦值,一個控制元件可以利用this.props獲取在這裡初始化它的屬性,由於元件初始化後,再次使用該元件不會呼叫getDefaultProps函式,所以元件自己不可以自己修改props(即:props可認為是隻讀的),只可由其他元件呼叫它時在外部修改。

getInitialState:這裡是對控制元件的一些狀態進行初始化,由於該函式不同於getDefaultProps,在以後的過程中,會再次呼叫,所以可以將控制控制元件的狀態的一些變數放在這裡初始化,如控制元件上顯示的文字,可以通過this.state來獲取值,通過this.setState來修改state值,修改方式如下:

function() {
    this.setState({
        showText: 'Hello'
    });
}
值得注意的是,一旦呼叫了this.setState方法,控制元件必將呼叫render方法,對控制元件進行再次的渲染,不過,如果React框架會自動根據DOM的狀態來判斷是否需要真正的渲染。

componentWillMount:可以通過字面意思看出,這個方法被呼叫時期是元件將要被載入在檢視上之前,功能比較少,即:render一個元件前最後一次修改state的機會。

render:上面已經說過render是一個元件必須有的方法,形式為一個函式,並返回JSX或其他元件來構成DOM,和Android的XML佈局、WPF的XAML佈局類似,只能返回一個頂級元素,即:

同時,在render函式中,只可通過this.state和this.props來訪問在之前函式中初始化的資料值。

componentDidMount:即呼叫了render方法後,元件載入成功並被成功渲染出來以後所執行的hook函式,一般會將網路請求等載入資料的操作,放在這個函式裡進行,來保證不會出現UI上的錯誤,如圖所示,_fetchData利用了fetch API來非同步請求Web API來載入商品資料:


(2)存在期主要是用來處理與使用者的互動,如:點選事件,都比較簡單,也不是很常用,具體有以下幾個過程:

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

shouldComponentUpdate:一般用於優化,可以返回false或true來控制是否進行渲染

componentWillUpdate:元件重新整理前呼叫,類似componentWillMount

componentDidUpdate:更新後的hook

(3)銷燬期,用於清理一些無用的內容,如:點選事件Listener,只有一個過程:componentWillUnmount

3.總結


總得來講,React Native元件的生命週期,經歷了Mount->Update->Unmount這三個大的過程,即從建立到銷燬的過程,如果藉助Android和iOS的開發思想,那麼React Native元件的生命週期就更容易理解了。那麼,我們構建一個React Native控制元件也就能夠知道如何下手,如何控制和優化。經過一層一層的封裝和呼叫,一個完整的React Native應用也就構建出來了。

相關推薦

React Native入門——元件構成生命週期簡介

剛開始接觸React Native開發的程式猿可能會拿著網上的例子和文件一頭霧水,畢竟不是像C語言有個main、Android有個OnCreate,iOS有個ViewDidLoad那樣,加上JavaScript語法的隨意性,讓很多人無從下手,本文主要介紹React Nati

React Native入門(十三)之元件生命週期

前言 React Native中元件的生命週期,也就是React.js中Component的生命週期。 英文官方文件:React.Component 類比Android中activity和fragment,瞭解其生命週期對於我們掌握一個元件從建立到銷燬的整

基於React Native官方元件Image封裝的具備載入生命週期視覺反饋的元件react-native-loading-image

react-native-loading-image 基於React Native官方元件Image封裝的具備載入生命週期視覺反饋的元件,具體實現功能如下: 網路圖片Pending狀態渲染,提供閃爍動畫、loading.gif兩種方式 網路圖片Error狀態渲染

React Native元件生命週期

注:以下內容皆為複製,作為備份,僅供參考。 概述: 所謂生命週期,就是一個物件從開始生成到最後消亡所經歷的狀態,理解生命週期,是合理開發的關鍵。RN 元件的生命週期整理如下圖: 可以把元件生命週期大致分為三個階段: 第一階段:是元件第一次繪製階段,如圖中的上面虛線

React】歸納篇(六)元件物件的生命週期 | 例項 | 虛擬DOM與DOM Diff演算法

元件物件的生命週期 元件物件的生命週期,指的是從元件物件產生到銷燬的過程。 如下圖所示: 生命週期的回撥函式:你定義了,你沒有呼叫,但是這個函式卻執行了。如render()函式。也稱為生命週期的“鉤子函式”。 透明度改變動畫-例項 <!D

Vue學習之旅----元件生命週期

<template> <div id="app"> <v-home></v-home> <v-news></v-news> <router-view /> &l

React Native入門(七)之列表元件的使用(2)關於FlatList的一切

前言 在上一篇部落格中瞭解了列表元件的相關內容,主要是靜態的展示了一個列表資料,瞭解了ScrollVIew,FlatList和SectionList的基本用法,本篇文章就深入的瞭解一個常用的一個列表元件FlatList的用法! 屬性 新增頭部元件

react生命週期API(3.0)生命週期與定時器的用法;

react的定時器的呼叫必須採用元件生命週期函式去呼叫: 有關元件的生命週期,見菜鳥教程: http://www.runoob.com/react/react-component-life-cycle

react框架設計原理生命週期

1、ReactJS的背景 1、react是Facebook為實現其內部廣告系統專案設計的一種前端介面構建方式 2、前端工程師的職責就是把邏輯資料實時反應到view層,既然涉及到vie層, 那

React元件規範和生命週期

元件規範 當你通過呼叫React.createClass()建立一個元件類時,應該提供一個包含render方法和其他可選的生命週期方法的說明物件。 請注意:可以使用簡單的JavaScript類作為元件類。儘管有所不同,但是這些類應該實現大多數相同的函式

React Native入門-劉望舒

sta timestamp adc ati nat ref srp lan pkg React Native入門(一)環境搭建與Hello World React Native入門(二)Atom+Nuclide安裝、配置與調試 React Native入門(三)組件的P

React Native 入門寶典

num 種類 類的繼承 nds 哪些 這份 校驗 sre working 聲明:該書的筆者為徐嬴老師,一名具有5年IOS開發經驗,和兩年RN開發經驗的老司機。 原文可以在gitbook上找到 筆者只是為他的書中提的的一些列問題,進行有償答疑。 有償答疑。本書將持續保持更

React Native入門 Enable live Reload

image inf 由於 src mage enable 實時 alt 更新 在開發項目時,有時一點點小修改就需要重新編譯,打包,安裝,效率比較低 RN 提供了一種實時重載 (Enable live Reload)的方式,來實現快速的調試開發,修改保存後會立刻載真機或模

React Native 中組件的生命周期(轉)

color 用戶交互 next get 網絡請求 class native true mount 概述 就像 Android 開發中的 View 一樣,React Native(RN) 中的組件也有生命周期(Lifecycle)。所謂生命周期,就是一個對象從開始生成到最後

React Native 入門基礎知識總結

入門 部署 社區 另一個 變化 started EDA set rop 中秋在家閑得無事,想著做點啥,後來想想,為啥不學學 react native。在學習 React Native 時, 需要對前端(HTML,CSS,JavaScript)知識有所了解。對於JS,可以看看

React Native 入門環境搭建

參考文獻:http://wiki.jikexueyuan.com/project/react-native/GettingStarted.html  這裡說下我的安裝步驟以及安裝時遇到的問題: 1、安裝 Homebrew   網址: http://brew

6、第十 - WEB開發進階 - Django使用者登入後的資訊管理生命週期簡述

 案例操作: 一、Django編寫模擬使用者登入並跳轉到後臺   示範案例,要求: 1、模擬使用者登入,賬號密碼一致、輸入錯誤的話進行提示 2、使用者登入成功跳轉到後臺,並顯示其他home.html資訊 3、彈出對話方塊,設定新增、刪除按鈕 程式碼結構: 程式碼

react-native-cli執行專案打包apk失敗的解決過程

剛開始學習react native,第一步自然是搭建好開發環境,node及jdk本身就有,Python2、Android studio以及Android sdk的安裝倒是沒什麼大問題,按照官網的教程做就行了,還有Android studio我目前理解的是其實主要作用就是配置對應版本的安卓模擬器或者是安裝sdk

基於React Native官方元件FlatList,增加可定製化“下拉重新整理”、“下拉載入更多”元件API的新列表元件react-native-refresh-loadmore-flatlist

react-native-refresh-loadmore-flatlist 基於React Native官方元件FlatList,增加可定製化“下拉重新整理”、“下拉載入更多”元件API的新列表元件,具體實現功能如下: 自定義下拉重新整理元件API 自定義上拉Lo

React-Native 官方元件FlatLis 關於屬性onEndReached、onEndReachedThreshold的幾點使用總結

FlatList元件為什麼依然這麼難用 官方提供的這款List元件相比於上一個版本的ListView來說已經優化很多了,但是,還是不能稱之為一個成熟的元件。 onEndReached、onRefresh兩個屬性的引入說明官方確實是想將下拉重新整理、上拉載入的模式引入這個元件,但是