React Native 嵌入到iOS原生应用

前端之家收集整理的这篇文章主要介绍了React Native 嵌入到iOS原生应用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_403_1@如果你正准备从头开始制作一个新的应用,那么React Native会是个非常好的选择。但如果你只想给现有的原生应用中添加一两个视图或是业务流程,React Native也同样不在话下。只需简单几步,你就可以给原有应用加上新的基于React Native的特性、画面和视图等。

@H_403_1@把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. 发布应用,升职加薪,走向人生巅峰!��

1. 创建一个原生应用

@H_403_1@这个就不多说。

2. 添加依赖包

@H_403_1@React Native的植入过程同时需要ReactReact Native两个node依赖包。我们把具体的依赖包记录在package.json文件中。如果项目根目录中没有这个文件,那就自己创建一个。

2.1 package.json

@H_403_1@我这里的做法是在项目的根目录下创建一个专门存放react native相关的文件夹,就像这样:

@H_403_1@然后在这个文件夹下创建一个package.json文件,就像这样:

@H_403_1@在package.json文件中的内容是这样的:

  1. {
  2. "name": "NativeRN","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" } }
@H_403_1@解释一下:

  • @H_403_1@version字段没有太大意义(除非你要把你的项目发布到npm仓库)。

  • @H_403_1@scripts中是用于启动packager服务的命令。

  • @H_403_1@dependencies中的reactreact-native的版本取决于你的具体需求。一般来说我们推荐使用最新版本。你可以使用npm info reactnpm info react-native来查看当前的最新版本。另外,react-nativereact的版本有严格要求,高于或低于某个范围都不可以。

@H_403_1@本文无法在这里列出所有react native和对应的react版本要求,只能提醒读者先尝试执行npm install,然后注意观察安装过程中的报错信息,例如require react@某.某.某版本,but none was installed,然后根据这样的提示,执行npm i -S react@某.某.某版本。

2.2 安装依赖包

@H_403_1@使用npm(node包管理器,Node package manager)来安装React和React Native模块。这些模块会被安装到项目根目录下的node_modules/目录中。 在包含有package.json文件的目录(一般也就是项目根目录,我这里因为创建了RNComponent文件夹,所以是在这个文件夹目录下执行这个命令)中运行下列命令来安装:

  1. $ npm install
@H_403_1@运行完成后会出现node_modules这样一个文件夹,这个文件夹下包含了RN的一些模块,就像这样:

3. React Native框架

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

3.1 Subspecs

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

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

3.2 Podfile

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

@H_403_1@创建podfile在这里不在多说,相信只要用过cocoapods的朋友都知道。

@H_403_1@podfile创建完成之后,在文件添加一下内容

  1. # target的名字一般与你的项目名字相同
  2. target 'NativeRN' do
  3.  
  4. # 'node_modules'目录一般位于根目录中
  5. # 但是如果你的结构不同,那你就要根据实际路径修改下面的`:path`
  6. pod 'React',:path => './RNComponent/node_modules/react-native',:subspecs => [
  7. 'Core','RCTText','RCTNetwork','RCTWebSocket',# 这个模块是用于调试功能
  8. # 在这里继续添加你所需要的模块
  9. ]
  10. # 如果你的RN版本 >= 0.42.0,请加入下面这行
  11. pod "Yoga",:path => "./RNComponent/node_modules/react-native/ReactCommon/yoga"
  12.  
  13. end
@H_403_1@然后执行下面的��命令,开始安装React Native的pod包。

  1. $ pod install

4. 代码集成

4.1 index.ios.js

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

@H_403_1@index.ios.js是React Native应用在iOS上的入口文件而且它是不可或缺的!它可以是个很简单的文件,简单到可以只包含一行require/import导入语句。

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

4.2 添加你自己的React Native代码

  1. import React,{ Component } from 'react';
  2. import {
  3. AppRegistry,StyleSheet,Text,View
  4. } from 'react-native';
  5.  
  6. export default class NativeRN extends Component {
  7. render() {
  8. return (
  9. <View style={styles.container}>
  10. <Text style={styles.welcome}>
  11. Welcome to React Native!
  12. </Text>
  13. <Text style={styles.instructions}>
  14. To get started,edit index.ios.js
  15. </Text>
  16. <Text style={styles.instructions}>
  17. Press Cmd+R to reload,{'\n'}
  18. Cmd+D or shake for dev menu
  19. </Text>
  20. </View>
  21. );
  22. }
  23. }
  24.  
  25. const styles = StyleSheet.create({
  26. container: {
  27. flex: 1,justifyContent: 'center',alignItems: 'center',backgroundColor: '#F5FCFF',},welcome: {
  28. fontSize: 20,textAlign: 'center',margin: 10,instructions: {
  29. textAlign: 'center',color: '#333333',marginBottom: 5,});
  30.  
  31. AppRegistry.registerComponent('NativeRN',() => NativeRN);

4.3 集成到原生项目中

@H_403_1@我这里先创建了一个ViewController,��这样:

@H_403_1@然后导入#import <RCTRootView.h>文件,��这样:

  1. - (void)viewDidLoad {
  2. [super viewDidLoad];
  3. // Do any additional setup after loading the view.
  4.  
  5. NSString * strUrl = @"http://localhost:8081/index.ios.bundle?platform=ios&dev=true";
  6. NSURL * jsCodeLocation = [NSURL URLWithString:strUrl];
  7.  
  8. RCTRootView * rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
  9. moduleName:@"NativeRN"
  10. initialProperties:nil
  11. launchOptions:nil];
  12. self.view = rootView;
  13.  
  14. }

4.4 配置info.plist

@H_403_1@还需要在info.plist文件中配置一下:

  1. <key>NSAppTransportSecurity</key>
  2. <dict>
  3. <key>NSExceptionDomains</key>
  4. <dict>
  5. <key>localhost</key>
  6. <dict>
  7. <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
  8. <true/>
  9. </dict>
  10. </dict>
  11. </dict>
@H_403_1@配置后的效果

5. 运行项目

@H_403_1@在运行项目前,先在react native文件夹目录下,启动开发服务器。也就是在本文中的RNComponent目录下,启动命令行:

  1. $ npm start
@H_403_1@运行项目,看到效果

@H_403_1@博客地址

猜你在找的React相关文章