ReactNative与原生的交互

RN和原生端(iOS)交互学习 去年我开始参与一个RN项目,其中我的工作是负责和前端协调百度地图接口,就是RN端调原生的地图并显示,其中我负责写需要的接口。我们的项目主要还是原生的,RN项目是嵌在其中的一个子模块,背景介绍完毕。1.以下是进入的入口debug的时候地址是前端项目地址,需要前端起RN项目的npm服务器,如果是release,则是去codePush服务器下载最新代码。2.下面这个类是管理地图的类,返回值view即使百... 阅读详情

RN项目引用三方:
RN三方库需要npm 导入
这里是官网地址:
添加库:
进入RN项目根目录:
输入命令:npm install “第三方库” –save 如:npm install react-native-swiper –save
删除库:
如果没有–save只是删除库,不会删除依赖
输入命令 npm uninstall “第三方库” –save [npm uninstall react-native-toast –save]

RN项目与原生交互:
首先建立Manager管理类并引入如下文件

#import <React/RCTBridgeModule.h>
#import <React/RCTLog.h>
#import <React/RCTBridge.h>
#import <React/RCTEventDispatcher>
#import <React/RCTEventEmitter >
解释下这几个头文件:
RCTEventDispatcher(事件调度器)
RCTBridge (桥接)
RCTBridgeModule (桥接模块)需要循序协议如:

@interface XXXXManger : NSObject
RCTEventEmitter (RCT的事件源)
Log就不用说了

XXXXManger.m中添加RCT_EXPORT_MODULE()宏,来 实现RCTBridgeModule协议。这个宏也可以添加一个参数用来指定在Javascript中访问这个模块的名字。如果你不指定,默认就会使用这个Objective-C类的名字。
RCT_EXPORT_METHOD 支持所有标准JSON类型,包括:
string (NSString)
number (NSInteger, float, double, CGFloat, NSNumber)
boolean (BOOL, NSNumber)
array (NSArray) 包含本列表中任意类型
object (NSDictionary) 包含string类型的键和本列表中任意类型的值
function (RCTResponseSenderBlock)

如何提供方法供调用?我给点实际的代码以简单的版本号为例代码如下:
OC代码接口提供:
RCT_EXPORT_METHOD(getSVersion:(RCTResponseSenderBlock)callBack){
      NSString *build = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
      callBack(@[[NSNull null],build]);
}

Javascript里可以这样调用这个方法:
import { NativeModules } from ‘react-native’;
var XXXXManger = NativeModules. XXXXManger;
XXXXManger.getSVersion((error,events) =>{
console.log(‘error’, error);
console.log(‘events’, events);
});
有些人自然要问反过来OC调用RN如何实现?
OC调用RN就简单了通知:
[self.bridge.eventDispatcher sendAppEventWithName:@”didReceiveNotification” body:userInfo];
是很不是很熟悉? 跟iOS的Notification太像了
sendAppEventWithName:@”didReceiveNotification” body:userInfo
postNotificationName:@”hidenTabbar” object:body
这里没什么说的我们继续
另外sendAppEventWithName已经过期但还能使用,现在需要将OC调用RN与RN调用CO分开处理上述方法可用一个Manager管理现在分开,自定义类并继承 RCTEventEmitter.h( #import )遵循RCTBridgeModule协议
然后要导出你所有的方法名字
-(NSArray *)supportedEvents
{
return @[@”isCallback”, @”xxxx”, @”xxxxxx”];//有几个就写几个
实现你导出的所有方法,里面都使用 sendEventWithName 方法即可

-(void)iseCallback:(NSString*)code result:(NSString*) result {
[self sendEventWithName:@”iseCallback”
body:@{
@”code”: code,
@”result”: result, }];
继续使用sendAppEventWithName:会警告
‘sendDeviceEventWithName:body:’ is deprecated: Subclass RCTEventEmitter instead
Javascript里可以这样调用这个方法:
import {
…
NativeModules,
NativeEventEmitter, //导入NativeEventEmitter模块
} from ‘react-native’;

var XXXXManger = NativeModules. XXXXManger;
//在组件中使用
componentWillMount() {
this.listener = NativeEventEmitter.addListener(‘isCallback’, this.isCallback.bind(this)); //对应了原生端的名字
}
componentWillUnmount() {
this.listener && this.listener.remove(); //记得remove哦
this.listener = null;
}
这里说下 EventEmitter 有三种类型
sendAppEventWithName

sendDeviceEventWithName

sendInputEventWithName

相对应的Javascript里也有三种类型

RCTAppEventEmitter

RCTDeviceEventEmitter

RCTInputEventEmitter

互相调用已经到此为止了:
再来说说RN的界面如何显示OC界面:
引入头文件
#import<React/RCTViewManager.h>
并继承RCTViewManager
添加宏 RCT_EXPORT_MODULE()
重写 - (UIView *)view {
return view;
}
你有可能会用到枚举类型那么你应该导入一下头文件并做如下操作
#import <React/RCTConvert.h>
@implementation RCTConvert(XXXXX)

RCT_ENUM_CONVERTER(XXXXX, (@{
@”XXXXX1”: @(XXXXX1),
@”XXXXX2”: @(XXXXX2),
@”XXXXX3”: @(XXXXX3),
}), XXXXX1, unsignedLongLongValue)
//#define RCT_ENUM_CONVERTER(type, values, default, getter) //facebook 实现代码//
@end

  • (NSDictionary *) xxxxx {
    return @{@”XXXXX1”:@(XXXXX1),
    @”XXXXX2”:@(XXXXX2),
    @”XXXXX3”:@(XXXXX3)};
    }

RCT_EXPORT_VIEW_PROPERTY(xxxxx, XXXXX);
这样在Javascript里就可以用枚举类型了。

RN与原生交互 RN与OC交互(iOS) RN调用OC部分 第一步:xcode编写接收跳转代码 遵守RCTBridgeModule协议 #import <UIKit/UIKit.h> #import <React/RCTBridgeModule.h> @interface ViewControllerOne : UIViewController<RCTBridgeModule&g... 阅读详情

相关推荐

React Native与原生交互之跳转及传参

React Native(简称RN)开发的app大部分都可以在JS端完成,但是也有一些复杂的功能是需要原生端来完成的,或者是在原生项目中集成RN,此时RN与原生端就不可避免的需要进行交互,比如页面跳转和数据传递。...

xiangzhihong8的专栏 3779

React Native知识12-与原生交互

一:原生传递参数给React Native 1:原生给React Native传参 原生给JS传数据,主要依靠属性。 通过initialProperties,这个RCTRootView的初始化函数的参数来完成。 RCTRootView还有一个appProperties属性,修改这个属性,JS端会调用相应的渲染方法。 我们使用RCTRootView将React Natvie视图封装到原生组...

weixin_33928137的博客 364

React-Native与原生交互通信方式

React-Native与原生(Android)的三种交互通信方式

react-native 之与"android原生模块"交互

react-native 之与android原生交互

文化园 6761

ReactNative前端与原生事件交互Demo

本程序功能:React-Native中原生模块向JavaScript前端发送事件。 说明如下: 首先,由RN中文网关于原生模块(Android)的介绍可以看到,RN前端与原 生模块之间通信,主要有三种方法: (1)使用回调函数Callback,它提供了一个函数来把返回值传回JavaScript。 (2)使用Promise来实现。 (3)原生模块向JavaScript发送事件。 其中,在我的博客React-Native开发之原生模块封装(Android)升级版 较为详细的阐述了如何使用回调函数Callback来将数据传向JavaScript 端。 关于本程序的详细的说明,请见中文博客。 http://blog.youkuaiyun.com/qq_25827845/article/details/52963594

ReactNative与Android原生简单交互

ReactNative与Android原生简单交互,有什么不对的地方请指教。

React Native和原生的交互

Running&H的博客 411

React Native与Android 原生通信的方法

本篇文章主要介绍了React Native与Android 原生通信的方法,主要是分享原生模块与JS传递数据的几种方式,非常具有实用价值,需要的朋友可以参考下

「React Native」与「Android」的交互方式总结

创建自定义 Module 其实就是将 RN 希望调用的原生功能封装成中间件的形式,这个中间件需要继承 ReactContextBaseJavaModule 类,并重写它的 getName() 方法。getName() 方法返回了 JS 可以访问的自定义 Module 名称,使得我们在 JS 端可以通过NativeModules.自定义 Module 名称的形式访问这个中间件。

idaretobe的专栏 810

能碳双控| AIRIOT智慧能碳管理解决方案

基于AIRIOT打造的智慧能碳管理平台解决方案结合大数据、物联网、人工智能(AI)、数字孪生等新一代信息技术,通过整合碳达峰、碳中和、实时碳价、碳配额和碳资产等多个模块,为组织提供了全方位、灵活且智能的碳资产管理解决方案,有助于实现碳管理目标、提升可持续性,并适应碳市场的不断变化。

AIRIOT的博客 1808

薅“刷宝”羊毛的autojs脚本教程,简单粗暴好用!!!

本教程旨在帮助大家实现用手机或闲置手机来进行“刷宝”平台的收益,能薅多少米就看你的本事了,作者教你的是如何用autojs来进行脚本的挂机教程,掌握了这个思路后,你可以根据自己的实际需要来改进脚本或者撸别的平台:) 适用系统,**android4.0以上,苹果机暂不适用**(大多数android系统手机都是7.0以上,要查看自己手机是android几,见文件夹“视频教程-基础”>1.查看android版本的方法)

rousseaou8的博客 8万+

react-native和原生android的交互

在react-native中加入getConstants,在CalendarModule.getConstant的方法写出。

weixin_38441229的博客 2160

搞定最强大模型Gemini学生订阅,白嫖一年,包教包会

白嫖现在最强大模型

BUG猿的博客 2万+

react native之原生和RN的交互

前言:前端时间随着自己的学习和研究,也写了几篇关于react native的文章,虽然都是比较简的,但是都是根据自己的效果来做的流程,所以还是比较实用的,可以避免很多的坑。这篇react native与原生的交互也是很简单的实现,但是本人也是踩了很多的大坑才跳了出来实现了想要的效果。 啰嗦一下:这篇文章我打算作为自己学习react native的终篇了,以后应该不会再专门写这种怎么学习和使用RN

蒙的博客 2685

C# 量子级跨平台开发:用Uno Platform实现Windows、iOS、Android的“量子纠缠”UI同步

墨瑾轩推出编程学习平台,通过XAML的“量子纠缠”技术,实现跨平台开发的高效与一致性。传统方案中,多平台代码重复率高,UI差异大,而量子级方案则通过一套代码构建全平台应用,UI原子化同步,开发效率提升5倍。Uno Platform的“量子纠缠”架构解决了代码碎片化、性能瓶颈和调试难题,实现UI原子化同步、性能提升300%和跨平台数据无缝同步。核心架构包括XAML的跨平台渲染、MVVM的量子叠加态架构、平台差异的量子退相干处理以及性能优化的量子隧穿效应,为开发者提供高效、一致的跨平台开发体验。

java专栏 1165

Python库CloudScraper详细使用(绕过 Cloudflare 的反机器人页面的 Python 模块)

CloudScraper是一个专门用于绕过Cloudflare反机器人保护的Python库,它基于requests库构建,能够处理Cloudflare的5秒盾、WAF和人机验证等防护机制。

数据知道的博客 1万+

【RN】ReactNative与原生交互之Android篇

最近在因为项目需求需要,需要在原本的Android工程中集成RN,用RN来开发需求经常变更的、变更周期短的业务。写下这篇文章用来记述集成过程中的细节注意点以及一些学习经验。本文主要介绍RN与Android原生之间的一些交互操作,以及原生中间件的封装流程。涉及如何调用原生接口、传参、获取回调值、获取常量值、调用原生UI、监听原生发送的事件、线程操作等。 一、自定义原生模块 创建自定义模块...

大灰狼的小绵羊哥哥的博客 1064

Python爬虫实战:高效爬取中国版权登记数据

本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的中国版权登记数据爬虫系统。我们将使用Playwright+Asyncio实现无头浏览器自动化,结合Redis分布式任务队列和MongoDB数据存储,打造一个能够应对反爬机制的企业级数据采集方案。文章包含完整代码实现、性能优化技巧以及法律合规建议,帮助开发者快速掌握大规模数据采集的核心技术。本文详细介绍了2024年使用Python最新技术栈构建中国版权登记数据爬虫的完整方案。基于Playwright的无头浏览器自动化。

2201_76125261的博客 1899

ReactNative中js与原生如何交互

第一部分,在ReactNative中,原生与js交互常用的是原生通过向js发送事件,参考webview源代码。 1、定义事件与发送消息方法 public class ReactExpandListViewEvent extends Event { public static final String EVENT_NAME = "topExpandListViewClick";

活鱼逆流而上的博客 2705

中国国家级地面气象站基本气象要素日值数据集(V3.0)

气温数据TEM, 包括站点编号(sid), 纬度(lat), 经度(long), 高程(elev), 年(year), 月(month),日(day), 平均气温(tmean), 最高气温(tmax), 最低气温(tmin)气压数据PRS, 包括站点编号(sid), 纬度(lat), 经度(long), 高程(elev), 年(year), 月(month),日(day), 平均气压(pmean), 最高气压(pmax), 最低气压(pmin)中国国家级地面气象站基本气象要素日值数据集(V3.0)

J_Giser的博客 3896

Spring Boot集成ShardingSphere实现数据加密及数据脱敏 | Spring Cloud 48

利用ShardingSphere实现: - 数据加密 - 数据脱敏

gmHappy 1万+

ReactNative之iOS原生和JavaScript的交互

原文博客地址: https://www.titanjun.top/ReactNative之iOS原生和JavaScript的交互.html 在ReactNative开发中, 在JavaScript语法无法实现的时候会涉及到一些原生开发, 既然是混合开发就会涉及到一些iOS和ReactNative之间通讯的问题, 这里就涉及到两种方式: RN调用原生的方法, 给原生发送数据 原生给RN回传数...

RunningKing 1388

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

RN与Android原生交互

前言:最开始做RN开发的时候,没有和原生打交道,结果居然把项目做出来,后来有人问我,RN页面可以跳转到Activity页面吗?我蒙了,我想了一下为什么还要调到原生页面呢?那样就不兼容andoid和ios平台了,如果都要原生页面了,那何不就用原生页面。事实上,是可以从RN页面跳转到原生页面的,鉴于有些功能不好实现,走原生这条路并不是不行的。 拿Android来说: RN可以与原生模块通信(比如:...

weixin_30266829的博客 168

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

rn源码ios_RN与iOS原生交互(交互)

RN给原生传递参数步骤:1.用XCode打开一个已经存在的RN项目,即用XCode打开 项目文件夹/ios/***.xcodeproj文件。2.在XCode下新建桥接文件TakeViewManager继承RCTEventEmitter(RCTEventEmitter用于向RN发送事件),并在TakeViewManager.h文件中添加引用RCTBridgeModule实现RCTBridgeModu...

weixin_36215861的博客 609

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

iphone原生与html交互,React Native学识12-与原生交互

React Native知识12-与原生交互一:原生传递参数给React Native1:原生给React Native传参原生给JS传数据,主要依靠属性。通过initialProperties,这个RCTRootView的初始化函数的参数来完成。RCTRootView还有一个appProperties属性,修改这个属性,JS端会调用相应的渲染方法。我们使用RCTRootView将React Na...

weixin_42511517的博客 233

RN开发-Android原生交互

  在使用RN开发过程中,难免有些原生功能需要要自己来实现,下面总结一下在使用RN与原生开发交互。 1、在原生代码中定义实现类   1.1 首先继承 ReactContextBaseJaveModule抽象类     public class SomeModule extends ReactContextBaseJavaModule{}   1.2 实现构造方法     public...

weixin_30916125的博客 114
上一篇: ReactNative环境搭建
下一篇: 排序算法基础
WilonChen
博客等级 码龄11年 35粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值