美文网首页
学习笔记:RN-原生交互方案

学习笔记:RN-原生交互方案

作者: 双鱼子曰1987 | 来源:发表于2021-03-30 09:22 被阅读0次

一、iOS端交互

1、iOS调用JavaScript方法

1.1、原生端

  • 新建桥连类,继承于RCTEventEmitter.

  • 并且在- (NSArray<NSString *> *)supportedEvents声明JS方法,即将要要调用的JS方法名;

  • 使用self.bridge实例方法enqueueJSCall:method:args:completion:调用js方法。
    也可以调用sendEventWithName:body:方法,其内部实现也是调用enqueueJSCall:@"RCTDeviceEventEmitter" method:@"emit" args:body ? @[ eventName, body ] : @[ eventName ] completion:NULL

  • 初始化侨联类实例的时候,必须指定bridge.

@interface RNConnectManager : RCTEventEmitter
- (void)startLogin;
@end

#define JSFuncEventLogin @"EventLogin"

@implementation RNConnectManager

- (NSArray<NSString *> *)supportedEvents {
  return @[JSFuncEventLogin];
}

- (void)startLogin {
  [self.bridge enqueueJSCall:@"RCTDeviceEventEmitter"
                      method:@"emit"
                        args:@[JSFuncEventLogin]
                  completion:NULL];
}
@end

/* 初始化交互类 */ 
self.rnConector = [[RNConnectManager alloc] init];
self.rnConector.bridge = bridge; // 必须制定bridge
[self.rnConector startLogin]; // 调用

1.2、前端

  • 导入NativeEventEmitter模块,用于监听原生调用方法回调。
  • 初始化NativeEventEmitter 的发射器实例。
  • 注册方法,开始监听调用。
  • 注意,不用的时候,一定要把对应监听移除,例如在组件销毁时候。
import { NativeEventEmitter } from 'react-native';

// 初始化监听器
const NativeConnectorEmitter = new NativeEventEmitter(NativeModules.ReactConnector);

 // 监听方法
eventLoginSubscription = NativeConnectorEmitter.addListener('EventLogin', () => {
  alert('EventLogin');
});

// 适当的时候移除方法
eventLoginSubscription.remove();

2、js调用iOS原生方法

2.1、原生端

  • 侨连类实现RCTBridgeModule协议。
  • 使用宏RCT_EXPORT_MODULE(xxx); ,宏传入参数,设置前端使用名称。
  • 导出桥连类,RCT_EXPORT_METHOD导出方法,使用RCTResponseSenderBlock可以定义回调函数。
@interface RNConnectManager : RCTEventEmitter <RCTBridgeModule>
@end

@implementation RNConnectManager
/**
 1、必须:向RN导出该模块
 */
RCT_EXPORT_MODULE(ReactConnector);


/**
 2、必须:声明要给 JavaScript 导出的方法。
 */
RCT_EXPORT_METHOD(callNativeFunc:(NSString *)msg)
{
  NSLog(@"%@", msg);
}

RCT_EXPORT_METHOD(callNativeWithCallBackFunc:(NSString *)msg callback:(RCTResponseSenderBlock)callback)
{
  NSLog(@"%@", msg);
  callback(@[@"ok i got it"]);
}
@end

2.2、前端

  • 导入NativeModules,使用模块
import { NativeModules } from 'react-native';

// ReactConnector是RCT_EXPORT_MODULE宏指定的名称
const NativeConnector = NativeModules.ReactConnector;

// 调用无回调函数
NativeConnector.callNativeFunc('nihao native, i`m react native.');

// 调用有回调函数
NativeConnector.callNativeWithCallBackFunc('nihao native, i`m react native.', (data) => {
  alert(data);
})

二、Android端交互

有待学习,后续补充...

参考

React Native与iOS交互汇总
RN中文-iOS 原生模块

相关文章

  • 学习笔记:RN-原生交互方案

    一、iOS端交互 1、iOS调用JavaScript方法 1.1、原生端 新建桥连类,继承于RCTEventEmi...

  • iOS原生App与H5页面交互笔记

    iOS原生App与H5页面交互笔记 iOS原生App与H5页面交互笔记

  • iOS和html5交互开发

    iOS与HTML5交互方法总结 iOS原生APP与H5+JS交互 iOS原生App与H5页面交互笔记

  • iOSUIWebview 与js交互

    交互办法: 方案一.使用系统的最原生的交互: (1)js 调用原生的方法: 思路:网页的每次请求都是一次reque...

  • iOS原生App与H5页面交互笔记

    iOS原生App与H5页面交互笔记WKWebview 交互实现Http与iOS以及网页交互

  • h5与App原生交互方案

    H5与App原生交互,一般会是前端页面中的JavaScript与App使用的原生开发语言的交互。技术方案应能达到以...

  • 跨平台

    跨平台整体方案 和原生应用集成 ☆☆☆☆☆ 通用UI 组件库 ☆☆☆☆ javascript和原生相互交互 SD...

  • RN-学习笔记

    1. react-native-swiper 轮播组件 参考http://www.jianshu.com/p/4d...

  • 前端保存图片到手机

    方案梳理 1、前端直接保存,这样直接跨过跟原生app的桥接交互 2、桥接到原生,使用原生能力保存。传输图片数据使用...

  • iOS原生混编Flutter

    源码接入方案,后续探索交互传值、产物集成方案。 步骤 一、创建iOS原生项目 二、创建Flutter模块 需要在项...

网友评论

      本文标题:学习笔记:RN-原生交互方案

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