React Native的極簡手冊

來源:互聯網
上載者:User

標籤:

安裝入門可以參考:React Native官方文檔(http://reactnative.cn/docs/0.31/tutorial.html#content)。

 

NodeJS知識儲備:參考《NodeJS入門》(https://leanpub.com/nodebeginner-chinese)。(尊重知識,請購買原版)。

 

書籍:《React Native入門與實戰》

 

程式碼範例:30天學習React Native教程(https://github.com/fangwei716/30-days-of-react-native)

 

看到這裡,對React Native的使用就有了一些認識了。

 

 2   React and React Native and NodeJS

 

React 是由Facebook開發出來的用於開發使用者互動介面的JS庫。其源碼由Facebook和社區優秀的程式員維護。React帶來了很多新的東西,例如組 件化、JSX、虛擬DOM等。其提供的虛擬DOM使得我們渲染組件呈現非常之快,讓我們從頻繁操作DOM的繁重工作之中解脫。它做的工作更多偏重於MVC 中的V層,結合其它如Flux等一起,你可以非常容易構建強大的應用。

 

React 的世界裡,一切都是組件。你可以構建任何直接的HTML沒有的組件,例如下拉式功能表、導覽功能表等。同時,組件裡也可以包含其它組件。每一個組件都有一個 render方法,用於呈現該組件。同時,每一個組件都有屬於自己的scope,從而與其它的組件界定開來,用於構建屬於該組件的方法,以方便複用(app開發ty300.com)。 JSX是基於JS的擴充,它允許你在JS裡直接寫HTML的代碼,而不用像我們過去一樣要想在JS裡寫HTML不得不拼接一大堆的字串。React不直 接操作DOM,頻繁的操作DOM會非常影響效能和體驗。React將DOM結構儲存在記憶體中,與render方法的傳回值進行比較,通過其自由的diff 演算法計算出不同的地方,然後反應到真實的DOM當中。也就是說,大多數情況我們渲染組件、更改組件狀態等都是操作的虛擬DOM,只有在有所改變的情況下, 才會反應到真實的DOM當中。React Native基於ReacJS,把 React 編程模式的能力帶到移動開發,用來開發iOS和Android原生應用.

 

NodeJs 是基於JavaScript的,可以做為後台開發的語言. 提供了很多系統級的API,如檔案操作、網路編程等. 用事件驅動, 非同步編程,主要是為後台網路服務設計.React Native 藉助 Node.js,即 JavaScript 運行時來建立 JavaScript 代碼。

 

總結來說,React Native使用NodeJS來做系統處理,使用React來渲染。

 

 3   構建原理

 

在AppDelegate.m裡,找到

application:didFinishLaunchingWithOptions:

 

在這個方法中,主要做了幾件事:

  • 定義了 JS 代碼所在的位置,它在 dev 環境下是一個 URL,通過 development server 訪問;在生產環境下則從磁碟讀取,當然前提是已經手動產生過了 bundle 檔案;

  • 建立了一個 RCTRootView 對象,該類繼承於 UIView,處理常式所有 View 的最外層;

  • 調 用 RCTRootView 的 initWithBundleURL 方法(入門教程qkxue.net)。在該方法中,建立了 bridge 對象。顧名思義,bridge 起著兩個端之間的橋接作用,其中真正工作的是類就是大名鼎鼎的 RCTBatchedBridge。RCTBatchedBridge 是初始化時通訊的核心,我們重點關注的是 start 方法。在 start 方法中,會建立一個 GCD 線程,該線程通過串列隊列調度了以下幾個關鍵的任務。

 

RCTRootView 用於載入 JavaScript 應用以及渲染最後的視圖的。當應用開始啟動並執行時候,RCTRootView將會從以下的URL中載入應用:

http://localhost:8081/index.ios.bundle

 

重 新調用了你運行這個App時開啟的終端視窗,它開啟了一個 packager 和 server 來處理上面的請求。在 Safari 中開啟那個 URL;你將會看到這個 App 的 JavaScript 代碼。你也可以在 React Native 架構中找到你的代碼。當你的App開始運行了以後,這段代碼將會被載入進來,然後 JavaScriptCore 架構將會執行它。在程式裡,它將會載入 功能 組件,然後構建出原生的 UIKit 視圖。JavaScript應用運行在模擬器上,使用的是原生UI,沒有任何內嵌的瀏覽器。應用程式會使用 React.createElement 來構建應用 UI ,React會將其轉換到原生環境中。

 

當 UI 渲染出來後,render 方法會返回一顆視圖渲染樹,並與當前的 UIKit 視圖進行比較。這個稱之為 reconciliation 的過程的輸出是一個簡單的更新列表, React 會將這個列表應用到當前視圖。只有實際改變了的部分才會重新繪製。即ReactJS獨特的——virtual-DOM(文件物件模型,一個web文檔的視 圖樹)和 reconciliation概念。

 

 4   組件的生命週期

 

組件的生命週期分成三個狀態:

  • Mounting:已插入真實 DOM

  • Updating:正在被重新渲染

  • Unmounting:已移出真實 DOM

 

React 為每個狀態都提供了兩種處理函數,will 函數在進入狀態之前調用,did 函數在進入狀態之後調用,三種狀態共計五種處理函數。

  • componentWillMount()

  • componentDidMount()

  • componentWillUpdate(object nextProps, object nextState)

  • componentDidUpdate(object prevProps, object prevState)

  • componentWillUnmount()

 

此外,React 還提供兩種特殊狀態的處理函數。

componentWillReceiveProps(object nextProps):已載入組件收到新的參數時調用

shouldComponentUpdate(object nextProps, object nextState):組件判斷是否重新渲染時調用

 

這些方法的詳細說明,可以參考官方文檔。

 

另外一個需要關注的點是,組件的style屬性的設定方式不能寫成

style="opacity:{this.state.opacity};"

 

而要寫成

style={{opacity: this.state.opacity}}

 

這是因為 React 組件樣式是一個對象,所以第一重大括弧表示這是 JavaScript 文法,第二重大括弧表示樣式對象。

稿源:勤快學QKxue.nET

更多React Native的極簡手冊介紹

React Native的極簡手冊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.