美文网首页
React Native嵌入原生应用

React Native嵌入原生应用

作者: made_China | 来源:发表于2017-05-04 17:33 被阅读231次

    核心概念

    如果你正准备从头开始制作一个新的应用,那么React Native会是个非常好的选择。但如果你只想给现有的原生应用中添加一两个视图或是业务流程,React Native也同样不在话下。只需简单几步,你就可以给原有应用加上新的基于React Native的特性、画面和视图等。

    把React Native组件植入到iOS应用中有如下几个主要步骤:

    1.首先当然要了解你要植入的React Native组件。

    2.创建一个Podfile,在其中以subspec的形式填写所有你要植入的React Native的组件。

    3.创建js文件,编写React Native组件的js代码。

    4.添加一个事件处理函数,用于创建一个RCTRootView。这个RCTRootView正是用来承载你的React Native组件的,而且它必须对应你在index.ios.js中使用AppRegistry注册的模块名字。

    5.启动React Native的Packager服务,运行应用。

    6.根据需要添加更多React Native的组件。

    7.调试。

    8.准备部署发布 (比如可以利用react-native-xcode.sh脚本)。

    9.发布应用。

    开发环境准备

    基础环境

    首先按照开发环境搭建教程来安装React Native在iOS平台上所需的一切依赖软件(比如npm)。

    CocoaPods

    CocoaPods是针对iOS和Mac开发的包管理工具。我们用它来把React Native框架的代码下载下来并添加到你当前的项目中

    依赖包

    React Native的植入过程同时需要React和React Native两个node依赖包。


    我们把具体的依赖包记录在package.json(Sublime Textc创建)文件中。如果项目根目录中没有这个文件,那就自己创建一个。

    对于一个典型的React Native项目来说,一般package.json和index.ios.js等文件会放在项目的根目录下。而iOS相关的原生代码会放在一个名为ios/的子目录中,这里也同时放着你的Xcode项目文件(.xcodeproj)。

    下面是一个最简单的package.json的内容示例。

    示例中的version字段没有太大意义(除非你要把你的项目发布到npm仓库)。scripts中是用于启动packager服务的命令。dependencies中的react和react-native的版本取决于你的具体需求。一般来说我们推荐使用最新版本。你可以使用npm info react和npm info react-native来查看当前的最新版本。另外,react-native对react的版本有严格要求,高于或低于某个范围都不可以。本文无法在这里列出所有react native和对应的react版本要求,只能提醒读者先尝试执行npm install,然后注意观察安装过程中的报错信息,例如require react@某.某.某版本, but none was installed,然后根据这样的提示,执行npm i -S react@某.某.某版本。

    {

    "name": "ExerciseOne",

    "version": "0.0.1",

    "private": true,

    "scripts": {

    "start": "node node_modules/react-native/local-cli/cli.js start"

    },

    "dependencies": {

    "react": "16.0.0-alpha.6",

    "react-native": "0.44.0"

    }

    }

    安装依赖包

    使用npm(node包管理器,Node package manager)来安装React和React Native模块。这些模块会被安装到项目根目录下的node_modules/目录中。 在包含有package.json文件的目录(一般也就是项目根目录)中运行下列命令来安装:

    $ npm install

    React Native框架

    React Native框架整体是作为node模块安装到项目中的。下一步我们需要在CocoaPods的Podfile中指定我们所需要使用的组件。

    在你开始把React Native植入到你的应用中之前,首先要决定具体整合的是React Native框架中的哪些部分。而这就是subspec要做的工作。在创建Podfile文件的时候,需要指定具体安装哪些React Native的依赖库。所指定的每一个库就称为一个subspec。

    可用的subspec都列在node_modules/react-native/React.podspec中,基本都是按其功能命名的。一般来说你首先需要添加Core,这一subspec包含了必须的AppRegistry、StyleSheet、View以及其他的一些React Native核心库。如果你想使用React Native的Text库(即组件),那就需要添加RCTText的subspec。同理,Image需要加入RCTImage,等等。

    在React和React Native模块成功安装到node_modules目录之后,你就可以开始创建Podfile以便选择所需的组件安装到应用中。

    创建Podfile的最简单的方式就是在iOS原生代码所在的目录中使用CocoaPods的init命令:

    ## 在iOS原生代码所在的目录中(也就是`.xcodeproj`文件所在的目录)执行:$ pod init

    Podfile会创建在执行命令的目录中。你需要调整其内容以满足你的植入需求。调整后的Podfile的内容看起来类似下面这样:

    platform :ios,'8.0'

    target'ExerciseOne'do

    pod'AFNetworking','3.1.0'

    pod'YTKNetwork','2.0.3'

    pod'MJExtension'

    pod'Reachability'

    pod'MBProgressHUD'

    pod'BabyBluetooth','~> 0.7.0'

    # 'node_modules'目录一般位于根目录中

    #但是如果你的结构不同,那你就要根据实际路径修改下面的`:path`

    pod'React',:path =>'../node_modules/react-native', :subspecs => [

    'Core',

    'RCTText',

    'RCTActionSheet',

    'RCTImage',

    'RCTNetwork',

    'RCTWebSocket',#这个模块是用于调试功能的

    #在这里继续添加你所需要的模块

    ]

    #如果你的RN版本>= 0.42.0,请加入下面这行

    pod"Yoga", :path =>"../node_modules/react-native/ReactCommon/yoga"

    end

    Pod安装

    创建好了Podfile后,就可以开始安装React Native的pod包了。

    $ pod install

    ps:在按照官网的书写模式后 我执行pod install 后出现报错: (格式和路径都没有问题 .......)

    后来才看出来自己是直接在iOS工程里集成的根目录的问题  之后将path路径两位小数点改成一位就没问题 执行pod install成功.

    代码集成

    现在我们已经准备好了所有依赖,可以开始着手修改原生代码来把React Native真正植入到应用中了。在我们的2048示例中,首先尝试添加一个显示有"High Score"(得分排行榜)的React Native页面。

    React Native组件:创建一个index.ios.js文件

    首先创建一个空的index.ios.js文件。一般来说我们把它放置在项目根目录下。

    index.ios.js是React Native应用在iOS上的入口文件。而且它是不可或缺的!它可以是个很简单的文件,简单到可以只包含一行require/import导入语句。本教程中为了简单示范,把全部的代码都写到了index.ios.js里(当然实际开发中我们并不推荐这样做)。

    # 在项目根目录执行以下命令创建文件:$ touch index.ios.js

    添加你自己的React Native代码:

    RCTRootView集成

    新建一个UIViewController中执行: 

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

    NSDictionary*dic =@{@"scores":@[@{@"name":@"Alex",@"value":@"42"},@{@"name":@"Joel",@"value":@"10"}]};

    RCTRootView*rootView = [[RCTRootViewalloc]initWithBundleURL:jsCodeLocationmoduleName:@"ExerciseOne"initialProperties:diclaunchOptions:nil];

    self.view= rootView;

    测试运行:   由于请求是http的 修改info.plist:

    运行Packager    $ npm start  执行成功如图:

    运行应用

    如果你使用的是Xcode,那么照常编译和运行应用即可。如果你没有使用Xcode(但是你仍然必须安装Xcode),则可以在命令行中使用以下命令来运行应用:

    在项目的根目录中执行: $ react-native run-ios  

    运行成功如下图:

    相关文章

      网友评论

          本文标题:React Native嵌入原生应用

          本文链接:https://www.haomeiwen.com/subject/dudrtxtx.html