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

2021-03-30  本文已影响0人  双鱼子曰1987

一、iOS端交互

1、iOS调用JavaScript方法

1.1、原生端

@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、前端

import { NativeEventEmitter } from 'react-native';

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

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

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

2、js调用iOS原生方法

2.1、原生端

@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、前端

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 原生模块

上一篇 下一篇

猜你喜欢

热点阅读