首先讓我們先來初步了解下React Native。
React Native是Facebook于2015年年初推出的一個開源框架,實現以JavaScript開發移動應用。該框架基于Facebook于2013年推出React框架,但是支持原生控件調用。框架目前只推出了iOS平臺,但已經受到國內外移動開發者的追捧。從GitHub上的統計數據看,自React Native開源至現在的3個月時間,已經有170位貢獻者對項目進行了1790余次的提交。
最近React Native吸引了越來越多的人去關注。漸漸的越來越多的App開始應用React Native來開發。究竟為什么React Native會受到眾多企業的歡迎呢?
站在企業的就角度上分析,選擇React Native的4個理由:
1. JavaScript使用門檻低
JavaScript是Netscape公司開發的一種基于瀏覽器客戶端的、面向對象的、解釋性的腳本語言,JavaScript語言的特點:
?語法簡單、使用靈活
?跨平臺:所有的移動、PC平臺都集成了內置瀏覽器,對JavaScript有很好的支持
?事件驅動式的設計思想,使開發思路更清晰
?單線程處理,沒有復雜的線程機制 由于JavaScript在WEB前端擁有強大的技術優勢,幾乎100%的網頁腳本語言都采用的是JavaScript.
2. 使用JavaScript開發,開發成本低
使用JavaScript做開發,瀏覽器兼容問題一直是一個讓開發者很棘手的問題。而在移動端(iOS和Android平臺上),由于內置瀏覽器都采用Webkit內核,因而在使用JavaScript開發時,完全無需考慮瀏覽器兼容問題,進一步降低了JavaScript的開發成本,這也是眾多跨平臺開發工具采用JavaScript的原因之一。
React Native采用了JSX語法糖工具。JSX是一種語法轉換工具,能夠將XML標簽轉換為JavaScript代碼。這意味著,你可以在JavaScript里像寫XML一樣去寫JavaScript代碼,不用手動拼接XML格式的字符串,不用顯示地創建標簽和執行插入標簽操作,而且這樣寫出來的代碼可讀性非常強。
3.原生UI,UI交互效率高
在React Native之前,跨平臺的JavaScript移動端解決方案,都是采用WEB開發模式,開發出來的都是增強版的WEB應用。但由于瀏覽器的限制:單線程、DOM渲染效率低等原因,WEB頁面在移動端的交互體驗非常差,和原生應用的體驗相距甚遠。這也是JavaScript跨平臺解決方案有很多,但原生開發仍然不可替代的原因。
React Native另辟蹊徑,未采用WEB模式,而是使用JavaScript去開發原生應用。React Native自己實現了一套與原生語言通訊的機制,將JavaScript視為數據源,用原生語言去調用數據源,然后用原生UI來展示,用原生語言來實現事件機制,這樣便不再有瀏覽器單線程、DOM渲染效率低導致的交互體驗差的問題。由于JavaScript和原生語言的運行效率很高,因而應用交互體驗非常好,堪比原生應用。
4. Facebook的技術支撐
Facebook于13年5月份開源了React項目,而在15年才開源基于React的React Native項目,由此可見,Facebook在前端布局已久,React Native的面世、可謂厚積薄發。Facebook有很強大的開發團隊在開發和維護React、React Native項目,而有這樣背景的公司在支持,React Native項目勢必會有飛速的發展。 React Native是一種思想,有太多值得借鑒的東西,同時,也是一個奇跡。然而,React Native也有很多不足:
- 對于開發者,他們更希望"Write Once,Run Anywhere",這樣可以大大降低開發者的開發成本;然而React Native主張"Learn Once, Write Anywhere",這樣就要求開發者為每個平臺分別開發。相信這里面會有一些可以復用的模塊,但是在其他平臺都采用"Write Once,Run Anywhere"模式的情況下,React Native的開發成本還是相對較高。
- React Native只推出了iOS平臺的開發工具,Android平臺尚未推出(預計推出時間為2015年10月份)。Android平臺的表現是否會向iOS平臺這樣優秀?是否需要單獨的學習的成本?iOS代碼在Android平臺的復用性有多大?這些不確定性,必然會增加使用React Native的風險。
作為一個新生的產品,React Native能在移動開發領域創造如此多的概念式突破,儼然已經是一個奇跡。對這樣一個產品,我們需要做的,應該是關注、期待,和支持.
工欲善其事,必先利其器。有了大概的了解,接下來我們進入本文的正題,搭建開發環境。
安裝
必需的軟件
Homebrew
Homebrew, Mac系統的包管理器,用于安裝NodeJS和一些其他必需的工具軟件。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
譯注:在Max OS X 10.11(El Capitan)版本中,homebrew在安裝軟件時可能會碰到/usr/local
目錄不可寫的權限問題。可以使用下面的命令修復:
sudo chown -R `whoami` /usr/local
Node
使用Homebrew來安裝Node.js.
React Native目前需要NodeJS 5.0或更高版本。本文發布時Homebrew默認安裝的是最新版本,一般都滿足要求。
brew install node
安裝完node后建議設置npm鏡像以加速后面的過程(或使用科學上網工具)。注意:不要使用cnpm!cnpm安裝的模塊路徑比較奇怪,packager不能正常識別!
npm config set registry https://registry.npm.taobao.org --
globalnpm config set disturl https://npm.taobao.org/dist --global
Yarn、React Native的命令行工具(react-native-cli)
Yarn是Facebook提供的替代npm的工具,可以加速node模塊的下載。React Native的命令行工具用于執行創建、初始化、更新項目、運行打包服務(packager)等任務。
npm install -g yarn react-native-cli
安裝完yarn后同理也要設置鏡像源:
yarn config set registry https://registry.npm.taobao.org --
globalyarn config set disturl https://npm.taobao.org/dist --global
如果你看到EACCES: permission denied。這樣的權限報錯,那么請參照上文的homebrew譯注,修復/usr/local
目錄的所有權:
sudo chown -R `whoami` /usr/local
Xcode
React Native目前需要Xcode 8.0 或更高版本。你可以通過App Store或是到Apple開發者官網上下載。這一步驟會同時安裝Xcode IDE和Xcode的命令行工具。
雖然一般來說命令行工具都是默認安裝了,但你最好還是啟動Xcode,并在Xcode | Preferences | Locations,菜單中檢查一下是否裝有某個版本的Command Line Tools。Xcode的命令行工具中也包含一些必須的工具,比如git等。
推薦安裝的工具
Watchman
Watchman是由Facebook提供的監視文件系統變更的工具。安裝此工具可以提高開發時的性能(packager可以快速捕捉文件的變化從而實現實時刷新)。
brew install watchman
Flow
Flow是一個靜態的JS類型檢查工具。譯注:你在很多示例中看到的奇奇怪怪的冒號問號,以及方法參數中像類型一樣的寫法,都是屬于這個flow工具的語法。這一語法并不屬于ES標準,只是Facebook自家的代碼規范。所以新手可以直接跳過(即不需要安裝這一工具,也不建議去費力學習flow相關語法)。
brew install flow
Nuclide
Nuclide(此鏈接需要科學上網)是由Facebook提供的基于atom的集成開發環境,可用于編寫、運行和 調試React Native應用。點擊這里閱讀Nuclide的入門文檔。
譯注:我們更推薦使用WebStorm或Sublime Text來編寫React Native應用。
測試安裝
react-native init AwesomeProjectcd AwesomeProjectreact-native run-ios
提示:你可以使用--version
參數創建指定版本的項目。例如react-native init MyApp --version 0.39.2。注意版本號必須精確到兩個小數點。
你也可以在Nuclide中打開AwesomeProject
文件夾 然后運行,或是雙擊ios/AwesomeProject.xcodeproj文件然后在Xcode中點擊Run按鈕。
修改項目
現在你已經成功運行了項目,我們可以開始嘗試動手改一改了:
使用你喜歡的編輯器打開index.ios.js并隨便改上幾行。
在iOS Emulator中按下?-R就可以刷新APP并看到你的最新修改!