在開始編寫這個房產搜索App之前,我們先來創建一個簡單的Hello World項目。我們將通過這個例子來演示React Native的各個組件和概念。
用你喜歡的文本編輯器(例如Sublime Text)打開index.ios.js ,刪除所有內容。然后加入以下語句:
`'use strict';`
這將開啟嚴謹模式,這會改進錯誤的處理并禁用某些js語法特性,這將讓JavaScript表現得更好。
> 注意: 關于嚴謹模式,讀者可以參考 Jon Resig的文章:“ECMAScript 5 Strict Mode, JSON, and More”。
然后加入這一句:
`var React = require('react-native');`
這將加載 react-native 模塊,并將其保存為React變量。React Native 使用和Node.js 一樣的 require 函數來加載模塊,類似于Swift中的import語句。
> 注意:
> 關于JavaScript 模塊的概念,請參考 Addy Osmani的[這篇文章](http://addyosmani.com/writing-modular-js/)。
然后加入如下語句:
~~~
var styles = React.StyleSheet.create({
??text: {
????color: 'black',
????backgroundColor: 'white',
????fontSize: 30,
????margin: 80
??}
});
~~~
這將定義一個css樣式,我們將在顯示“Hello World”字符串時應用這個樣式。
在React Native 中,我們可以使用?[Cascading Style Sheets (CSS)](http://www.w3schools.com/css/)?語法來格式化UI樣式。
接下來敲入如下代碼:
~~~
class PropertyFinderApp extends React.Component {
??render() {
????return React.createElement(React.Text, {style: styles.text}, "Hello World!");
??}
}
~~~
這里我們定義了一個JavaScript 類。JavaScript類的概念出現自ECMAScript 6。由于JavaScript是一門不斷演變的語言,因此web開發者必須保持與瀏覽器的向下兼容。由于React Native基于JavaScriptCore,因此我們完全可以放心使用它的現代語法特性,而不需要操心與老版本瀏覽器兼容的問題。
> 注意:如果你是Web開發人員,我建議你使用新的JavaScript語法。有一些工具比如 Babel,可以將現代JavaScript語法轉變為傳統JavaScript語法,這樣就能和老式瀏覽器進行兼容。
PropertyFinderApp 類繼承自 React.Componen,后者是React UI中的基礎。Components包含了一些不可變屬性、可變屬性和一些渲染方法。當然,這個簡單App中,我們就用到一個render方法。
React Native 的Components不同于UIKit 類,它們是輕量級的對象。框架會將React Components轉換為對應的本地UI對象。
最后敲入如下代碼:
~~~
React.AppRegistry.registerComponent('PropertyFinder', function() { return PropertyFinderApp });
~~~
AppRegistry 代表了App的入口以及根組件。保存文件,返回Xcode。確保當前Scheme為PropertyFinder ,然后在模擬器運行App。你將看到如下效果:

看到了吧,模擬器將JavaScript代碼渲染為本地UI組件,你不會看到任何瀏覽器的痕跡。
你可以這樣來確認一下:
在Xcode中,選中 Debug\View Debugging\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代碼。在React Native 框架代碼中你會找到“Hello World”相關代碼。
當App打開時,這些代碼會被加載并執行。以我們的App來說,PropertyFinderApp組件會被加載,然后創建相應的本地UI組件。