https://blog.csdn.net/zww1984774346/article/details/71167775
方法一:
带.h
.h
#import <Foundation/Foundation.h>
#import <React/RCTBridge.h>
@interface RNOrderiOS : NSObject<RCTBridgeModule>
@end
.m
#import "RNOrderiOS.h"
@implementation RNOrderiOS
RCT_EXPORT_MODULE();
RCT_EXPORT_METHOD(doSomething:(NSString *)testStr){
NSLog(@"----%@----",testStr);
}
@end
原生模块:
一个.m
#import <Foundation/Foundation.h>
#import <React/RCTBridge.h>
@interface RedirectModule : NSObject<RCTBridgeModule>
@end
@implementation RedirectModule
RCT_EXPORT_MODULE();
RCT_EXPORT_METHOD(startActivityFromJS:(NSString *)str1 ReceiveStr:(NSString *)str2){
NSLog(@"----%@---%@-",str1,str2);
}
@end
RN模块:
//引入原生类
const RouteMapViewManager = require('react-native').NativeModules.RedirectModule;
//调用
startAndStop(type) {
RouteMapViewManager. startActivityFromJS('22','222')
}
2.
NativeModules.RedirectModule.startActivityFromJS('2222','222')
方法二:
原生模块:
@implementation RouteMapViewManager
RCT_EXPORT_MODULE()
RCT_EXPORT_METHOD(startAndStop:(nonnull NSNumber *)reactTag type:(NSString *)type) {
//前半部固定写法
NSLog(@"------------2323423--%@----------",type);
}
@end
RN模块:
//引入原生控件
let RCTRouteMapView = requireNativeComponent('RouteMapView', RouteMapView);
class RouteMapView extends Component {
//显示原生控件
render() {
return <RCTRouteMapView ref="gaodeMap" {...this.props}/>
}
/**
* RN向原生控件发送消息
* @param name
* @param args
* @returns {*}
*/
runCommand(name, args = []) {
return Platform.select({
android: () => UIManager.dispatchViewManagerCommand(
this.getHandle(),
UIManager.RouteMapView.Commands[name],
args
),
// ios: () => LottieViewManager[name](this.getHandle(), ...args),
ios: () => UIManager.dispatchViewManagerCommand(
this.getHandle(),
UIManager.RouteMapView.Commands[name],
args
)
})();
}
getHandle() {
return findNodeHandle(this.refs.gaodeMap);
}
startAndStop(type) {
//ios 需加标识 ‘startAndStop’,传的需以数组形式传 [type]
Platform.OS === 'ios' ? this.runCommand('startAndStop',[type]) : this.runCommand(type);
}
带有回调
//回调
//RCTResponseSenderBlock
//RCTResponseSenderBlock只接受一个参数,为数组,把需要回调的参数加入到数组中,回调回去
RCT_EXPORT_METHOD(calliOSActionWithCallBack:(RCTResponseSenderBlock)callBlock){
NSString *string=@"hello";
NSArray *array=@[@"RN",@"and",@"iOS"];
NSString *end=@"goodbay";
//更多参数放到数组中进行回调
callBlock(@[string,array,end]);
}
RN
. calliOSActionWithCallBack((string,array,end) => {
})
小结:之前比较坑的是 使用dispatchViewManagerCommand方法时 怎么都报错,报传的args里多个3,0,数组越界...找不到原因,在别的工程里写就可以了...