1. 程式人生 > >ReactNavtive框架教程(1)

ReactNavtive框架教程(1)

原文:http://www.raywenderlich.com/99473/introducing-react-native-building-apps-javascript

 注意:所有圖片放在了百度相簿空間,如果你看不到圖片,請複製圖片URL,然後貼上到位址列中進行檢視。

開始

ReactNative 框架可以在GitHub 獲得,你可以使用git clone命令或者直接下載zip包來獲取它。

ReactNative 使用了 Node.js,如果你的機器上沒有安裝Node.js,請先安裝它。 首先需要安裝 Homebrew。然後用brew命令來安裝Node.js:

brew install node

然後安裝 

watchman(用來監視檔案改動情況):

brew install watchman

然後安裝React Native 的CLI:

npm install -g react-native-cli

npm將立即下載並安裝CLI。npm是一個類似CocoPods或Carthage工具。

定位到要開發React Native App的資料夾,使用命令:

react-native init PropertyFinder

這將建立一個空的React Native專案。

在React Native專案資料夾中,node_modules資料夾將包含React Native 框架檔案。此外還有一個 index.ios.js

 檔案,這也是CLI建立的。

還有一個Xcode專案檔案及一個iOS資料夾,後者會有一些iOS程式碼用於引導ReactNavtive App。

開啟Xcode專案檔案,build&run。模擬器啟動並顯示如下介面:


與此同時Xcode還會開啟一個終端視窗,並顯示如下資訊:

 ===============================================================

 |  Running packager on port 8081.      

 |  Keep this packager running while developing on any JS        

 |  projects. Feel free to close this tab and run your own     

 |  packager instance if you prefer.                             

 |                                                             

 |     https://github.com/facebook/react-native                

 |                                                              

 ===============================================================

Looking for JS files in

   /Users/colineberhardt/Temp/TestProject

React packager ready.

這是React Navtive Packager,它在node容器中執行。

千萬不要關閉這個視窗,因為這會導致Xcode終止App並重新執行它。

注意: 在開始接觸具體的程式碼之前(在本教程中,主要是js程式碼),我們將推薦 Sublime Text這個文字編輯工具,因為Xcode並不適合用於編寫js程式碼的。當然,你也可以使用 atombrackets 等其他輕量級的工具來替代。

Hello React Native

用你喜歡的文字編輯器(例如Sublime Text)開啟index.ios.js ,刪除所有內容。然後加入以下語句:

'use strict';

這將開啟嚴謹模式,這會改進錯誤的處理並禁用某些js語法特性,這將讓JavaScript表現得更好。

注意: 關於嚴謹模式,讀者可以參考 Jon Resig的文章:“ECMAScript5 Strict Mode, JSON, and More”。

然後加入這一句:

var React = require('react-native');

這將載入 react-native 模組,並將其儲存到React物件。React Native 使用和Node.js 一樣的 require 函式來載入模組,類似於Swift中的import語句。

注意: 關於JavaScript 模組的概念,請參考 AddyOsmani的這篇文章

然後敲入如下語句:

var styles = React.StyleSheet.create({

  text: {

    color: 'black',

    backgroundColor: 'white',

    fontSize: 30,

    margin: 80

  }

});

這將定義一個css樣式,我們將在顯示“Hello World”字串時應用這個樣式。

接下來敲入如下程式碼:

class PropertyFinderApp extends React.Component {

  render() {

    return React.createElement(React.Text, {style: styles.text}, "Hello World!");

  }

}

這裡我們定義了一個JavaScript 類。JavaScript類的概念出現自ECMAScript 6。由於JavaScript是一門不斷演變的語言,因此web開發者必須保持與瀏覽器的向下相容。由於ReactNative基於JavaScriptCore,因此我們完全可以放心使用它的現代語法特性,而不需要操心與老版本瀏覽器相容的問題。

注意:如果你是Web開發人員,我建議你使用新的JavaScript語法。有一些工具比如 Babel ,可以將現代JavaScript語法轉變為傳統JavaScript語法,這樣就能和老式瀏覽器進行相容。

PropertyFinderApp 類繼承自 React.Componen,後者是React UI中的基礎。Components包含了一些不可變屬性、可變屬性和一些渲染方法。當然,這個簡單App中,我們就用到一個render方法。

ReactNative 的Components不同於UIKit 類,它們是輕量級的物件。框架會將ReactComponents轉換為對應的本地UI物件。

最後敲入如下程式碼:

React.AppRegistry.registerComponent('PropertyFinder', function() { return PropertyFinderApp });

AppRegistry 代表了App的入口以及根元件。儲存檔案,返回Xcode。確保當前Scheme為PropertyFinder ,然後在模擬器執行App。你將看到如下效果:


看到了吧,模擬器將JavaScript程式碼渲染為本地UI元件,你不會看到任何瀏覽器的痕跡。

你可以這樣來確認一下:

在Xcode中,選中 Debug\ViewDebugging\Capture View Hierarchy,檢視本地檢視樹。你將找不到任何UIWebView例項。


在 Xcode 中開啟 AppDelegate.m,找到application:didFinishLaunchingWithOptions:方法。

在這個方法中,建立了一個RCTRootView,該物件負責載入JavaScript App並渲染相關檢視。

App一啟動,RCTRootView會載入如下URL的內容:

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

還記得App啟動時彈出的終端視窗嗎?終端視窗中執行的packager和server會處理上述請求。

你可以用Safari來開啟上述URL,你將會看到一些JavaScript程式碼。在ReactNative 框架程式碼中你會找到“Hello World”相關程式碼。

當App開啟時,這些程式碼會被載入並執行。以我們的App來說,PropertyFinderApp元件會被載入,然後建立相應的本地UI元件。