在現(xiàn)有的原生應用中嵌入React Native頁面(ios版)

通常情況下我們有兩種方式來構(gòu)建一個使用RN技術(shù)的應用:

  1. RN包原生抢腐。應用入口由RN控制畴蒲,頁面跳轉(zhuǎn)邏輯也由RN主導篇梭,當涉及做原生增強時使用RN的API構(gòu)建一些原生的模塊并暴露出來給RN調(diào)用笆制。
  2. 原生包RN氮墨。應用入口由原生代碼控制,頁面跳轉(zhuǎn)邏輯由原生主導栗弟。某些跨平臺業(yè)務邏輯頁面由RN開發(fā)污筷。充分利用RN的跨平臺特性,較少原生開發(fā)的巨大成本乍赫。

當采用第二種方式時就需要在原生應用中嵌入RN頁面“曛現(xiàn)在就手把手的教大家如何操作。為方便大家理解耿焊,我們從一個全新創(chuàng)建的Objective C項目出發(fā)揪惦。

第一步,創(chuàng)建一個OC原生項目罗侯。

在XCode中快速地創(chuàng)建一個OC single view 項目器腋。


第二步,添加RN需要的npm依賴項目钩杰。

和其他js項目一樣纫塌,添加RN的npm 依賴首先需要在項目的根目錄下創(chuàng)建一個package.json文件。二話不說讲弄,直接在項目根目錄下新建package.json,然后拷入以下代碼:

{
    "name": "EmbedRN",
    "version": "0.0.1",
    "private": true,
    "scripts": {
      "start": "node node_modules/react-native/local-cli/cli.js start",
      "test": "jest"
    },
    "dependencies": {
      "react": "~15.4.0-rc.4",
      "react-native": "0.38.0"
    },
    "devDependencies": {
      "babel-jest": "21.0.0",
      "babel-preset-react-native": "3.0.2",
      "jest": "21.0.1",
      "jest-react-native": "18.0.0",
      "prop-types": "^15.5.10",
      "react-test-renderer": "~15.4.0-rc.4"
    },
    "jest": {
      "preset": "react-native"
    }
  }

React和RN的版本根據(jù)自己的需要進行設定措左,但要注意二者版本匹配。如果不確定可以自己先react-native init一個項目看一下版本號避除。

接下來怎披,熟悉得不能再熟悉的動作了: npm install。

安裝完成后我們在項目的根目錄下就多了一個子目錄node_modules/瓶摆。親切吧凉逛。

第三步,安裝cocopod依賴項群井。

使用cocodpod可以快速幫助我們添加React Native依賴項到原生項目里去状飞。首先在項目根目錄下新建Podfile(通過執(zhí)行pod init),這是cocopod的依賴項目錄书斜。
拷入以下內(nèi)容:

target 'EmbedRN' do
  # 'node_modules'目錄一般位于根目錄中
  # 但是如果你的結(jié)構(gòu)不同诬辈,那你就要根據(jù)實際路徑修改下面的`:path`
  pod 'React', :path => './node_modules/react-native', :subspecs => [
    'Core',
    'RCTText',
    'RCTNetwork',
    'RCTWebSocket', # 這個模塊是用于調(diào)試功能的
    # 在這里繼續(xù)添加你所需要的模塊
  ]
end

依賴的庫名是React, 根據(jù)項目的需要添加不同的subspecs進來。如要使用Text那么加進來RCTText, Image就加RCTImage等等荐吉”涸悖可用的subspecs列表可以查閱node_modules/react-native/React.podspec文件。

好了样屠,有了node_modules和Podfile,接下來運行命令:

pod install

Pod項目依賴安裝成功酬荞。關(guān)閉當前xcode session搓劫,從此以后我們就使用.xcworkspace來打開我們的項目了。

第四步混巧,編寫RN頁面

新建RN入口頁面:index.ios.js。至于這里的文件名是否一定必須是index.ios.js勤揩,回答是否定的咧党。你可以使用任意的文件名,只要后面在oc代碼中指定同樣的文件名就可以了陨亡。
比如你想使用business2.js做文件名傍衡,沒問題,在后面的oc代碼中指定好jsCodeLocation地址就可以了负蠕。這樣就可以保證原生應用按照不同的業(yè)務場景嵌入不同的RN頁面蛙埂。


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


export default class Page1 extends Component {
  render() {
    return (
      <View style={{
          flex: 1,
          justifyContent: 'center',
          alignItems: 'center',
          backgroundColor: '#F5FCFF'}}>
        <Text>
          Welcome to React Native!
        </Text>
        <Text>
          To get started, edit index.ios.js
        </Text>
        <Text>
          Press Cmd+R to reload,{'\n'}
          Cmd+D or shake for dev menu
        </Text>
      </View>
    );
  }
}


AppRegistry.registerComponent('Page1', () => Page1);

第五步,原生頁面調(diào)用RN頁面

在ViewController.m中添加如圖代碼遮糖。 RCTRootView就是終極大法了绣的。

第六步,運行

首先打開RN的package server:

npm start -- --reset-cache

然后xcode中運行項目欲账。
大功告成屡江。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赛不,隨后出現(xiàn)的幾起案子惩嘉,更是在濱河造成了極大的恐慌,老刑警劉巖踢故,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件文黎,死亡現(xiàn)場離奇詭異,居然都是意外死亡殿较,警方通過查閱死者的電腦和手機耸峭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來斜脂,“玉大人抓艳,你說我怎么就攤上這事≈愦粒” “怎么了玷或?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長片任。 經(jīng)常有香客問我偏友,道長,這世上最難降的妖魔是什么对供? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任位他,我火速辦了婚禮氛濒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鹅髓。我一直安慰自己舞竿,他們只是感情好,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布窿冯。 她就那樣靜靜地躺著骗奖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪醒串。 梳的紋絲不亂的頭發(fā)上执桌,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機與錄音芜赌,去河邊找鬼仰挣。 笑死,一個胖子當著我的面吹牛缠沈,可吹牛的內(nèi)容都是我干的膘壶。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼博烂,長吁一口氣:“原來是場噩夢啊……” “哼香椎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起禽篱,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤畜伐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后躺率,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玛界,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年悼吱,在試婚紗的時候發(fā)現(xiàn)自己被綠了慎框。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡后添,死狀恐怖笨枯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情遇西,我是刑警寧澤馅精,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站粱檀,受9級特大地震影響洲敢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜茄蚯,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一压彭、第九天 我趴在偏房一處隱蔽的房頂上張望睦优。 院中可真熱鬧,春花似錦壮不、人聲如沸汗盘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衡未。三九已至,卻和暖如春家凯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背如失。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工绊诲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人褪贵。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓掂之,卻偏偏與公主長得像,于是被迫代替她去往敵國和親脆丁。 傳聞我的和親對象是個殘疾皇子世舰,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

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