React native 项目中JS与OC 如何进行数据交互

前言:自己从原生转到RN已经有两个月,一直跟着组长学习RN,在项目中实战的一些体会记录一下,本文中着重讲述JS与OC是如何进行数据交互,希望能够得到各位读者的建议。

为何需要入手RN是因为RN可以提高开发速度。

首先flexbox机制布局以及属性设置上,可以一段代码表述清楚,就可以集中精力在逻辑代码和体验上。但是RN也有缺点,就是版本兼容性问题一直是让开发者头疼的问题,不过建议各位开发从稳定的版本入手,如果由于历史原因需要兼容老项目的RN版本,还是老老实实用从老版本进行维护和开发。

其次最让公司所欣慰的一点就是热更新,就是不用打包提交APPStore 让用户重新启动APP就可以体验到最新的功能,国庆期间很火的P国旗功能。值得注意的是在APP审核期间不要进行热更新,规避被拒的风险。

在很多金融APP中 有个很重要却很稳定的模块就是行情K线模块,这个模块是展示了某个金融产品的交易数据。这里的业务操作必须和JS进行数据交互。

 

一、原生模块需要做的准备工作

原生和JS交互是通过一个桥接文件,这个文件继承RCTEventEmitter类翻译成中文叫“事件发射器”,查看RCTEventEmitter头文件看到这样一段注释“events to be obserbved by JS” 翻译成中文是事件将被JS观察。还得继承RCTBridgeModule代理,此代理功能强大很多关键的方法就是从这里体现的。例如RTC_EXPORT_MODULE()方法,意思是JS暴露给OC的模块,OC只需要按照JS所规范的方法就可以将数据传递给JS代码进行执行。

要设置JS所支持的模块调用方法- (NSArray<NSString *> *)supportedEvents 设置一个数组。

原生只需要通过一个block进行调用方法- (void)sendEventWithName:(NSString *)eventName body:(id)body。这个方法在RN源码中对应的是如下方法:

- (void)enqueueJSCall:(NSString *)module method:(NSString *)method args:(NSArray *)args completion:(dispatch_block_t)completion

{

  [self.batchedBridge enqueueJSCall:module method:method args:args completion:completion];

}

二、JS所需要做的准备工作

在对应的OC2JS文件中引入

import { NativeEventEmitter, NativeModules } from 'react-native';

const { RNBridgeEventManager } = NativeModules;

const loadingManagerEmitter = new NativeEventEmitter(RNBridgeEventManager);

const subscription = loadingManagerEmitter.addListener(‘暴露给OC的模块名称’,(reminder) => {

//执行的方法

});

定义一个RN的桥接对象RNBridgeEventManager ,新建一个订阅者对象subscription ,订阅者对象实现监听暴露给OC的模块发送过来的参数。然后执行JS方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值