React-Native 筆記-嵌入到現(xiàn)有原生應(yīng)用

IDE

  • Atom + Nuclide + atom-react-native-automcomplete
  • 自定義幾個(gè) snippets,比如創(chuàng)建相應(yīng)類型的 class 等

集成到現(xiàn)有項(xiàng)目

基礎(chǔ)環(huán)境需求
依賴包

React Native的植入過(guò)程同時(shí)需要ReactReact Native兩個(gè)node依賴包。

具體的依賴包記錄在package.json文件中。如果項(xiàng)目根目錄中沒(méi)有這個(gè)文件,那就自己創(chuàng)建一個(gè)。

對(duì)于一個(gè)典型的React Native項(xiàng)目來(lái)說(shuō),一般package.jsonindex.ios.js等文件會(huì)放在項(xiàng)目的根目錄下。而iOS相關(guān)的原生代碼會(huì)放在一個(gè)名為ios/的子目錄中,這里也同時(shí)放著你的Xcode項(xiàng)目文件(.xcodeproj)。

下面是一package.json的示例:

{
  "name": "NumberTileGame",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start"
  },
  "dependencies": {
    "react": "15.4.1",
    "react-native": "0.39.2"
  }
}

示例中的version字段沒(méi)有太大意義(除非你要把你的項(xiàng)目發(fā)布到npm倉(cāng)庫(kù))。scripts中是用于啟動(dòng)packager服務(wù)的命令。dependencies中的react和react-native的版本取決于你的具體需求。一般來(lái)說(shuō)我們推薦使用最新版本。你可以使用npm info react和npm info react-native來(lái)查看當(dāng)前的最新版本。另外,react-native對(duì)react的版本有嚴(yán)格要求,高于或低于某個(gè)范圍都不可以。本文無(wú)法在這里列出所有react native和對(duì)應(yīng)的react版本要求,只能提醒讀者先嘗試執(zhí)行npm install,然后注意觀察安裝過(guò)程中的報(bào)錯(cuò)信息,例如require react@某.某.某版本, but none was installed,然后根據(jù)這樣的提示,執(zhí)行npm i -S react@某.某.某版本。

安裝依賴包

在包含有package.json文件的目錄(一般也就是項(xiàng)目根目錄)中運(yùn)行下列命令來(lái)安裝:

$ npm install
Podfile

React Native框架:
React Native框架整體是作為node模塊安裝到項(xiàng)目中的。下一步我們需要在CocoaPods的Podfile中指定我們所需要使用的組件.

Subspecs
在你開(kāi)始把React Native植入到你的應(yīng)用中之前,首先要決定具體整合的是React Native框架中的哪些部分。而這就是subspec
要做的工作。在創(chuàng)建Podfile文件的時(shí)候,需要指定具體安裝哪些React Native的依賴庫(kù)。所指定的每一個(gè)庫(kù)就稱為一個(gè)subspec。可用的subspec都列在node_modules/react-native/React.podspec中,基本都是按其功能命名的。一般來(lái)說(shuō)你首先需要添加Core,這一subspec包含了必須的AppRegistry、StyleSheet、View以及其他的一些React Native核心庫(kù)。如果你想使用React Native的Text庫(kù)(即<Text>組件),那就需要添加RCTText的subspec。同理,Image需要加入RCTImage,等等。

  • 創(chuàng)建 Podfile
## 在iOS原生代碼所在的目錄中(也就是`.xcodeproj`文件所在的目錄)執(zhí)行:
$ pod init
  • Podfile 內(nèi)容
# target的名字一般與你的項(xiàng)目名字相同
target 'NumberTileGame' do

  # 'node_modules'目錄一般位于根目錄中
  # 但是如果你的結(jié)構(gòu)不同,那你就要根據(jù)實(shí)際路徑修改下面的`:path`
  pod 'React', :path => '../node_modules/react-native', :subspecs => [
    'Core',
    'RCTText',
    'RCTNetwork',
    'RCTWebSocket', # 這個(gè)模塊是用于調(diào)試功能的
    # 在這里繼續(xù)添加你所需要的模塊
  ]
  # 如果你的RN版本 >= 0.42.0,請(qǐng)加入下面這行
  pod "Yoga", :path => "../node_modules/react-native/ReactCommon/yoga"

end

添加完需要的內(nèi)容后就可以執(zhí)行 pod install 了。

踩到的坑

項(xiàng)目環(huán)境:xcode V8.2.1 + iOS8.0
react: V15.4.1
react-native: V0.42.0

pod install 后 編譯失?。?/p>

報(bào)類似錯(cuò)誤的還有一個(gè)文件。

我的改法, 改成下面這樣,類似都這樣改,修改后編譯通過(guò):

#import "JavaScriptCore.h"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容