RN集成到現(xiàn)有應(yīng)用

  1. 配置項(xiàng)目目錄結(jié)構(gòu)
    首先創(chuàng)建一個(gè)空目錄用于存放 React Native 項(xiàng)目廷痘,然后在其中創(chuàng)建一個(gè)/ios子目錄规婆,把你現(xiàn)有的 iOS 項(xiàng)目拷貝到/ios子目錄中泽裳。
    2.在項(xiàng)目根目錄下創(chuàng)建一個(gè)名為package.json的空文本文件,然后填入以下內(nèi)容:
{
  "name": "MyReactNativeApp",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start"
  }
}

接下來我們使用 yarn 或 npm(兩者都是 node 的包管理器)來安裝 React 和 React Native 模塊增拥。請打開一個(gè)終端/命令提示行啄巧,進(jìn)入到項(xiàng)目目錄中(即包含有 package.json 文件的目錄),然后運(yùn)行下列命令來安裝:
yarn add react-native
這樣默認(rèn)會(huì)安裝最新版本的 React Native掌栅,同時(shí)會(huì)打印出類似下面的警告信息(你可能需要滾動(dòng)屏幕才能注意到):
warning "react-native@0.52.2" has unmet peer dependency "react@16.2.0".
這是正持绕停現(xiàn)象,意味著我們還需要安裝指定版本的 React:
$ yarn add react@16.2.0
注意必須嚴(yán)格匹配警告信息中所列出的版本猾封,高了或者低了都不可以逗概。

接下來需要在podfile里添加依賴庫

# target的名字一般與你的項(xiàng)目名字相同
target 'NumberTileGame' do

  # 'node_modules'目錄一般位于根目錄中
  # 但是如果你的結(jié)構(gòu)不同,那你就要根據(jù)實(shí)際路徑修改下面的`:path`
  pod 'React', :path => '../node_modules/react-native', :subspecs => [
    'Core',
    'CxxBridge', # 如果RN版本 >= 0.47則加入此行
    'DevSupport', # 如果RN版本 >= 0.43,則需要加入此行才能開啟開發(fā)者菜單
    'RCTText',
    'RCTNetwork',
    'RCTWebSocket', # 調(diào)試功能需要此模塊
    'RCTAnimation', # FlatList和原生動(dòng)畫功能需要此模塊
    # 在這里繼續(xù)添加你所需要的其他RN模塊
  ]
  # 如果你的RN版本 >= 0.42.0逾苫,則加入下面這行
  pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'

  # 如果RN版本 >= 0.45則加入下面三個(gè)第三方編譯依賴
  pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
  pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
  pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
end

代碼集成

  1. 創(chuàng)建一個(gè)index.js文件
    首先在項(xiàng)目根目錄下創(chuàng)建一個(gè)空的index.js文件卿城。
  2. 添加你自己的 React Native 代碼

在index.js中添加你自己的組件。這里我們只是簡單的添加一個(gè)<Text>組件铅搓,然后用一個(gè)帶有樣式的<View>組件把它包起來瑟押。

import React from 'react';
import {AppRegistry, StyleSheet, Text, View} from 'react-native';

class RNHighScores extends React.Component {
  render() {
    var contents = this.props['scores'].map((score) => (
      <Text key={score.name}>
        {score.name}:{score.value}
        {'\n'}
      </Text>
    ));
    return (
      <View style={styles.container}>
        <Text style={styles.highScoresTitle}>2048 High Scores!</Text>
        <Text style={styles.scores}>{contents}</Text>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#FFFFFF',
  },
  highScoresTitle: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  },
  scores: {
    textAlign: 'center',
    color: '#333333',
    marginBottom: 5,
  },
});

// 整體js模塊的名稱
AppRegistry.registerComponent('RNHighScores', () => RNHighScores);

RNHighScores是整體 js 模塊(即你所有的 js 代碼)的名稱。你在 iOS 原生代碼中添加 React Native 視圖時(shí)會(huì)用到這個(gè)名稱星掰。

掌握核心科技: RCTRootView
現(xiàn)在我們已經(jīng)在index.js中創(chuàng)建了 React Native 組件多望,下一步就是把這個(gè)組件添加給一個(gè)新的或已有的ViewController。
首先導(dǎo)入RCTRootView的頭文件氢烘。
#import <React/RCTRootView.h>
這里的initialProperties注入了一些演示用的數(shù)據(jù)怀偷。在 React Native 的根組件中,我們可以使用this.props來獲取到這些數(shù)據(jù)播玖。

    NSURL *jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.bundle?platform=ios"];

    RCTRootView *rootView =
      [[RCTRootView alloc] initWithBundleURL: jsCodeLocation
                                  moduleName: @"RNHighScores"
                           initialProperties:
                             @{
                               @"scores" : @[
                                 @{
                                   @"name" : @"Alex",
                                   @"value": @"42"
                                  },
                                 @{
                                   @"name" : @"Joel",
                                   @"value": @"10"
                                 }
                               ]
                             }
                               launchOptions: nil];
    UIViewController *vc = [[UIViewController alloc] init];
    vc.view = rootView;
    [self presentViewController:vc animated:YES completion:nil];
  1. 添加 App Transport Security 例外
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>localhost</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

4.運(yùn)行 Packager
要運(yùn)行應(yīng)用椎工,首先需要啟動(dòng)開發(fā)服務(wù)器(即 Packager,它負(fù)責(zé)實(shí)時(shí)監(jiān)測 js 文件的變動(dòng)并實(shí)時(shí)打包蜀踏,輸出給客戶端運(yùn)行)维蒙。具體只需簡單進(jìn)入到項(xiàng)目根目錄中,然后運(yùn)行:
npm start
5.運(yùn)行應(yīng)用
如果你使用的是 Xcode果覆,那么照常編譯和運(yùn)行應(yīng)用即可颅痊。如果你沒有使用 Xcode(但是你仍然必須安裝 Xcode),則可以在命令行中使用以下命令來運(yùn)行應(yīng)用:
react-native run-ios

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末局待,一起剝皮案震驚了整個(gè)濱河市斑响,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钳榨,老刑警劉巖恋捆,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異重绷,居然都是意外死亡沸停,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門昭卓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來愤钾,“玉大人,你說我怎么就攤上這事候醒∧馨洌” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵倒淫,是天一觀的道長伙菊。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么镜硕? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任运翼,我火速辦了婚禮,結(jié)果婚禮上兴枯,老公的妹妹穿的比我還像新娘血淌。我一直安慰自己,他們只是感情好财剖,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布悠夯。 她就那樣靜靜地躺著,像睡著了一般躺坟。 火紅的嫁衣襯著肌膚如雪沦补。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天咪橙,我揣著相機(jī)與錄音夕膀,去河邊找鬼。 笑死匣摘,一個(gè)胖子當(dāng)著我的面吹牛店诗,可吹牛的內(nèi)容都是我干的裹刮。 我是一名探鬼主播音榜,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼捧弃!你這毒婦竟也來了赠叼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤违霞,失蹤者是張志新(化名)和其女友劉穎嘴办,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體买鸽,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涧郊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了眼五。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妆艘。...
    茶點(diǎn)故事閱讀 40,424評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖看幼,靈堂內(nèi)的尸體忽然破棺而出批旺,到底是詐尸還是另有隱情,我是刑警寧澤诵姜,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布汽煮,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏暇赤。R本人自食惡果不足惜心例,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望翎卓。 院中可真熱鬧契邀,春花似錦、人聲如沸失暴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逗扒。三九已至古戴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間矩肩,已是汗流浹背现恼。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留黍檩,地道東北人叉袍。 一個(gè)月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像刽酱,于是被迫代替她去往敵國和親喳逛。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評論 2 359

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