從零手動(dòng)將React Native引入現(xiàn)有iOS項(xiàng)目

要說(shuō)React Native最大的優(yōu)勢(shì),那就是跨平臺(tái)创倔。通過(guò)JavaScript來(lái)開(kāi)發(fā)iOS及Android端的應(yīng)用翔脱,并驅(qū)動(dòng)原生組件渲染(邏輯用js編寫(xiě),UI都是原生的)谆甜。廢話(huà)不多說(shuō)垃僚,先來(lái)講一下使用React Native前的準(zhǔn)備工作。
??本人使用的React Native版本號(hào)是0.42.3规辱,支持iOS 8.0及以上

一谆棺、下載Node.js

Node.js是一個(gè)基于 Chrome V8 引擎的 JavaScript 運(yùn)行環(huán)境。
官網(wǎng)下載地址:https://nodejs.org/en/
國(guó)內(nèi)鏡像地址:http://nodejs.cn/download/
下載完成后按步驟安裝罕袋,最后會(huì)將Node.js與npm安裝到本機(jī)改淑。npm是Node.js包管理器。

二浴讯、安裝React Native命令行工具

在終端輸入:npm install -g react-native-cli

三朵夏、可以選擇性的安裝插件

  1. Watchman
    是一款安全軟件,可以監(jiān)視文件并且記錄文件的改動(dòng)情況榆纽,當(dāng)文件變更時(shí)它可以觸發(fā)一些操作仰猖。
    在終端輸入:brew install watchman
    其中的brew是Mac OSX上的軟件包管理工具。
  2. Flow
    是 Facebook 推出的一個(gè)開(kāi)源的 JavaScript 靜態(tài)類(lèi)型檢查器奈籽,可以發(fā)現(xiàn) JS 程序中的類(lèi)型錯(cuò)誤饥侵,以提高開(kāi)發(fā)效率和代碼質(zhì)量。
    在終端輸入:brew install flow

四衣屏、創(chuàng)建新的React Native項(xiàng)目

在終端輸入:react-native init HelloRNT
其中的HelloRNT是可以隨意更換的項(xiàng)目名稱(chēng)躏升。
當(dāng)項(xiàng)目創(chuàng)建成功后,打開(kāi)項(xiàng)目文件夾狼忱,大致目錄如下圖:


  1. index.ios.js
    是自動(dòng)生成的React Native應(yīng)用入口文件膨疏,它是不可或缺的!React Native會(huì)檢測(cè)某個(gè)文件是否具有.ios.或是.android.的擴(kuò)展名钻弄,然后根據(jù)當(dāng)前運(yùn)行的平臺(tái)加載正確對(duì)應(yīng)的文件佃却。文件中的代碼是用于生成一個(gè)視圖組件,部分代碼如下:

    /* 引入React Native組件 */
    import React, { Component } from 'react';
    import {
       View,
       TouchableOpacity,
       Text,
       TextInput,
       Image,
       Platform,
       AppRegistry
    } from 'react-native';
    /* 引入第三方組件 */
    import {RadioGroup, RadioButton} from 'react-native-flexi-radio-button'
    import ImagePicker from 'react-native-image-picker';
    import Picker from 'react-native-picker';
    import I18n from 'react-native-i18n';
    // 定義一個(gè)組件HelloRNT斧蜕,會(huì)用于注冊(cè)組件API的第二個(gè)參數(shù)
    export default class HelloRNT extends Component {
       render() {
         return (
           <View style={styles.container}>
             <Text style={styles.welcome}>
               Welcome to React Native!
             </Text>
             <Text style={styles.instructions}>
               To get started, edit index.ios.js
             </Text>
             <Text style={styles.instructions}>
               Press Cmd+R to reload,{'\n'}
               Cmd+D or shake for dev menu
             </Text>
           </View>
         );
       }
    }
    
     /*
        參數(shù)1:組件的名稱(chēng)双霍,任意字符串,但是一定要與之后創(chuàng)建RCTRootView時(shí)moduleName參數(shù)的傳入值一致
        參數(shù)2:定義的組件,如上的HelloRNT
     */    
     AppRegistry.registerComponent('HelloRNT', () => HelloRNT);
    
  2. ios
    包含HelloRNT.xcodeproj等文件洒闸,點(diǎn)擊Xcode會(huì)打開(kāi)創(chuàng)建的React Native項(xiàng)目染坯。

  3. node_modules
    是Node.js的組件模塊,其中包含了React Native項(xiàng)目的啟動(dòng)配置腳本等文件丘逸,當(dāng)然单鹿,開(kāi)發(fā)會(huì)用到的UI等組件也包含在里面。另外通過(guò)npm安裝的第三方組件也都在這個(gè)目錄下深纲。

  4. package.json
    是自動(dòng)生成的包文件仲锄,當(dāng)我們開(kāi)發(fā)React Native應(yīng)用的時(shí)候,可能會(huì)用到第三方類(lèi)庫(kù)湃鹊,比如一些優(yōu)秀的UI控件等儒喊,這時(shí)候我們需要在dependencies這一欄中配置上相應(yīng)的庫(kù),然后在終端輸入npm install 或者是直接在終端輸入 npm install react-native-image-picker --save 意思是安裝image-picker模塊币呵,--save表示將其配置到package.json文件中怀愧,其他需要關(guān)聯(lián)的庫(kù)類(lèi)似。這里安裝后余赢,index.ios.js里才能import
    // 這里在基礎(chǔ)上又增加了三個(gè)依賴(lài)庫(kù)芯义,其中^version代表兼容某個(gè)版本
    "dependencies": {
    "react": "15.4.2",
    "react-native": "0.42.3",
    "react-native-flexi-radio-button": "^0.1.5",
    "react-native-image-picker": "^0.25.5",
    "react-native-picker": "^4.0.18",
    },

最后需要在Xcode中導(dǎo)入第三方組件庫(kù)。要注意的是妻柒,有些并不需要導(dǎo)入扛拨,比如react-native-flexi-radio-button,那么如何區(qū)分需要導(dǎo)入跟不需要導(dǎo)入的組件呢举塔?看下載下來(lái)的組件文件夾绑警,如下圖:

帶有examples(例子)文件夾的不需要導(dǎo)入到Xcode

這是需要導(dǎo)入到Xcode工程的

導(dǎo)入后在項(xiàng)目中有關(guān)React Native的路徑如下圖:

不要忘記相關(guān)的.a也要加到項(xiàng)目中。這里介紹的是手動(dòng)導(dǎo)入啤贩,當(dāng)然也有自動(dòng)導(dǎo)入待秃,大家可以根據(jù)喜好選擇拜秧。任何一個(gè)正規(guī)的第三方組件都有安裝說(shuō)明痹屹,可以根據(jù)說(shuō)明自行摸索其他方法。
附上第三方組件下載平臺(tái):https://js.coach/react-native

五枉氮、將React Native引入iOS項(xiàng)目

終于到關(guān)鍵的步驟了志衍。既然是引入到已經(jīng)有的iOS項(xiàng)目中,為什么還要經(jīng)歷第四步聊替?簡(jiǎn)單說(shuō)就是要得到node_modules及其他一些文件楼肪。
這里將React Native引入到已經(jīng)創(chuàng)建好的RNTest項(xiàng)目中:

  1. 引入React Native
    打開(kāi)RNTest文件夾,將node_modules及需要的其他文件拷貝到里面惹悄。完成后目錄大致如下圖:


  2. 添加React Native組件春叫,可根據(jù)需要決定添加哪些
    2.1 右擊項(xiàng)目名稱(chēng)并選擇New Group選項(xiàng),將其命名為RNTLibraries。
    2.2 將靜態(tài)庫(kù)工程React.xcodeproj增加到RNTLibraries文件夾暂殖,React.xcodeproj路徑見(jiàn)下圖:



    2.3 將其他靜態(tài)庫(kù)工程增加到RNTLibraries文件夾价匠,路徑見(jiàn)下圖:



    添加完成后項(xiàng)目目錄大致如下圖:

    2.4 將靜態(tài)庫(kù)添加到項(xiàng)目,完成后如下圖:

    2.5 增加運(yùn)行腳本呛每,具體過(guò)程見(jiàn)下圖:



    完成后如下圖:
  3. 編譯運(yùn)行
    3.1 此時(shí)Xcode可能會(huì)提示“React/xxx.h”不能發(fā)現(xiàn)的錯(cuò)誤踩窖。由于引入的靜態(tài)庫(kù)工程之間有相互依賴(lài)關(guān)系,比如一些靜態(tài)庫(kù)工程依賴(lài)于React.xcodeproj工程晨横,那么必須先編譯React.xcodeproj洋腮。解決方法也簡(jiǎn)單,只需要打開(kāi)Edit Scheme配置一下手形,完成后的截圖如下:



    3.2 如果仍然報(bào)錯(cuò)的話(huà)啥供,我們還需要配置React相關(guān)的頭文件路徑,見(jiàn)下圖:



    3.3 Xcode可能還會(huì)提示一堆有關(guān)鏈接的錯(cuò)誤库糠,我們還需要配置Other Linker Flags項(xiàng)滤灯,見(jiàn)下圖:

這時(shí)候再按Command+B,Xcode提示Build Succeeded曼玩,OK鳞骤,大功告成!

對(duì)于如何更好的使用React Native黍判,可以參考http://facebook.github.io/react-native/docs/getting-started.html豫尽。


關(guān)注微信公眾號(hào)CodingArtist,可以第一時(shí)間得到文章更新通知! _

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末顷帖,一起剝皮案震驚了整個(gè)濱河市美旧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贬墩,老刑警劉巖榴嗅,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異陶舞,居然都是意外死亡嗽测,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)肿孵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)唠粥,“玉大人,你說(shuō)我怎么就攤上這事停做∥罾ⅲ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蛉腌,是天一觀(guān)的道長(zhǎng)官份。 經(jīng)常有香客問(wèn)我只厘,道長(zhǎng),這世上最難降的妖魔是什么舅巷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任懈凹,我火速辦了婚禮,結(jié)果婚禮上悄谐,老公的妹妹穿的比我還像新娘介评。我一直安慰自己,他們只是感情好爬舰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布们陆。 她就那樣靜靜地躺著,像睡著了一般情屹。 火紅的嫁衣襯著肌膚如雪坪仇。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天垃你,我揣著相機(jī)與錄音椅文,去河邊找鬼。 笑死惜颇,一個(gè)胖子當(dāng)著我的面吹牛皆刺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凌摄,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼羡蛾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了锨亏?” 一聲冷哼從身側(cè)響起痴怨,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎器予,沒(méi)想到半個(gè)月后浪藻,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乾翔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年爱葵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片末融。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钧惧,死狀恐怖暇韧,靈堂內(nèi)的尸體忽然破棺而出勾习,到底是詐尸還是另有隱情,我是刑警寧澤懈玻,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布巧婶,位于F島的核電站乾颁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏艺栈。R本人自食惡果不足惜英岭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望湿右。 院中可真熱鬧诅妹,春花似錦、人聲如沸毅人。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)丈莺。三九已至划煮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缔俄,已是汗流浹背弛秋。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留俐载,地道東北人蟹略。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像遏佣,于是被迫代替她去往敵國(guó)和親科乎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容