React Native 嵌入到iOS原生应用
来源:互联网 发布:安全数据库 编辑:程序博客网 时间:2024/06/06 02:00
如果你正准备从头开始制作一个新的应用,那么React Native会是个非常好的选择。但如果你只想给现有的原生应用中添加一两个视图或是业务流程,React Native也同样不在话下。只需简单几步,你就可以给原有应用加上新的基于React Native的特性、画面和视图等。
把React Native组件植入到iOS应用中有如下几个主要步骤:
- 首先当然要了解你要植入的React Native组件。
- 创建一个Podfile,在其中以subspec的形式填写所有你要植入的React Native的组件。
- 创建js文件,编写React Native组件的js代码。
- 添加一个事件处理函数,用于创建一个RCTRootView。这个RCTRootView正是用来承载你的React Native组件的,而且它必须对应你在index.ios.js中使用AppRegistry注册的模块名字。
- 启动React Native的Packager服务,运行应用。
- 根据需要添加更多React Native的组件。
- 调试。
- 准备部署发布 (比如可以利用react-native-xcode.sh脚本)。
- 发布应用,升职加薪,走向人生巅峰!��
1. 创建一个原生应用
这个就不多说。
2. 添加依赖包
React Native
的植入过程同时需要React
和React Native
两个node
依赖包。我们把具体的依赖包记录在package.json
文件中。如果项目根目录中没有这个文件,那就自己创建一个。
2.1 package.json
我这里的做法是在项目的根目录下创建一个专门存放react native
相关的文件夹,就像这样:
然后在这个文件夹下创建一个package.json
文件,就像这样:
在package.json
文件中的内容是这样的:
{ "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" }}
解释一下:
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@某.某.某版本。
2.2 安装依赖包
使用npm(node包管理器,Node package manager)来安装React和React Native模块。这些模块会被安装到项目根目录下的node_modules/目录中。 在包含有package.json文件的目录(一般也就是项目根目录,我这里因为创建了RNComponent文件夹,所以是在这个文件夹目录下执行这个命令)中运行下列命令来安装:
$ npm install
运行完成后会出现node_modules
这样一个文件夹,这个文件夹下包含了RN的一些模块,就像这样:
3. React Native框架
React Native框架整体是作为node模块安装到项目中的。下一步我们需要在CocoaPods的Podfile中指定我们所需要使用的组件。
3.1 Subspecs
在你开始把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
库(即<Text>
组件),那就需要添加RCTText
的subspec
。同理,Image
需要加入RCTImage
,等等。
3.2 Podfile
在React
和React Native
模块成功安装到node_modules
目录之后,你就可以开始创建Podfile
以便选择所需的组件安装到应用中。
创建podfile在这里不在多说,相信只要用过cocoapods的朋友都知道。
podfile创建完成之后,在文件里添加一下内容:
# target的名字一般与你的项目名字相同target 'NativeRN' do # 'node_modules'目录一般位于根目录中 # 但是如果你的结构不同,那你就要根据实际路径修改下面的`:path` pod 'React', :path => './RNComponent/node_modules/react-native', :subspecs => [ 'Core', 'RCTText', 'RCTNetwork', 'RCTWebSocket', # 这个模块是用于调试功能的 # 在这里继续添加你所需要的模块 ] # 如果你的RN版本 >= 0.42.0,请加入下面这行 pod "Yoga", :path => "./RNComponent/node_modules/react-native/ReactCommon/yoga"end
然后执行下面的��命令,开始安装React Native的pod包。
$ pod install
4. 代码集成
4.1 index.ios.js
首先创建一个空的index.ios.js文件。一般来说我们把它放置在项目根目录下。就像��:
index.ios.js是React Native应用在iOS上的入口文件。而且它是不可或缺的!它可以是个很简单的文件,简单到可以只包含一行require/import导入语句。
# 在项目根目录执行以下命令创建文件:$ touch index.ios.js
4.2 添加你自己的React Native代码
import React, { Component } from 'react';import { AppRegistry, StyleSheet, Text, View} from 'react-native';export default class NativeRN extends Component { render() { return ( <View style={styles.container}> <Text style={styles.welcome}> Welcome to React Native! </Text> <Text style={styles.instructions}> To get started, edit index.ios.js </Text> <Text style={styles.instructions}> Press Cmd+R to reload,{'\n'} Cmd+D or shake for dev menu </Text> </View> ); }}const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#F5FCFF', }, welcome: { fontSize: 20, textAlign: 'center', margin: 10, }, instructions: { textAlign: 'center', color: '#333333', marginBottom: 5, },});AppRegistry.registerComponent('NativeRN', () => NativeRN);
4.3 集成到原生项目中
我这里先创建了一个ViewController,��这样:
然后导入#import <RCTRootView.h>
头文件,��这样:
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. NSString * strUrl = @"http://localhost:8081/index.ios.bundle?platform=ios&dev=true"; NSURL * jsCodeLocation = [NSURL URLWithString:strUrl]; RCTRootView * rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation moduleName:@"NativeRN" initialProperties:nil launchOptions:nil]; self.view = rootView;}
4.4 配置info.plist
还需要在info.plist文件中配置一下:
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>localhost</key> <dict> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> </dict> </dict> </dict>
配置后的效果:
5. 运行项目
在运行项目前,先在react native文件夹目录下,启动开发服务器。也就是在本文中的RNComponent目录下,启动命令行:
$ npm start
运行项目,看到效果:
博客地址
- React Native 嵌入到iOS原生应用
- React Native嵌入到现有原生应用
- React Native 嵌入到原生应用
- React Native 嵌入到iOS原生项目
- 如何把React Native嵌入到原生android应用中
- react native (五)嵌入到原生应用
- React native学习第八章:嵌入到现有原生应用
- react native 学习笔记----将react native嵌入到Android原生应用
- React Native嵌入原生应用的坑
- react-native + as <react-native嵌入原生应用开发>
- Android react native 嵌入到现有的原生应用遇到的问题
- React native集成到Android原生应用
- Android原生嵌入React Native
- React Native集成到原生项目(IOS)
- React Native 集成到原生项目(iOS)
- React Native 集成到原生项目(iOS)
- React Native集成到IOS原生项目
- React Native 学习笔记十二(嵌入原生应用 甚是坑啊)
- ACM-二分贪心D-04
- FPGA作业_阶段一
- iOS中SEL和IMP
- html和xml的区别
- (13.1.3.1)PMBOK之三:十大知识领域之整合管理
- React Native 嵌入到iOS原生应用
- 自动化用到的一些小技巧
- POJ 1679:The Unique MST(次小生成树)
- 剑指offer-面试题 20:顺时针打印矩阵
- C++作业5
- Java将远程服务器上的文件经过本地服务器中转后输出至前端
- poj 1236 Network of Schools
- Emmet(ZenCoding)语法(一)
- git的基础使用