我正在尝试围绕我们现有的原生android和ios SDK构建一个react-native包装器。我想知道我是否可以为Android和iOS桥接模块使用相同的类名和类方法?如何为正确的设备映射正确的模块?
例如,对于iOS:
// CalendarManager.h
#import "RCTBridgeModule.h"
@interface CalendarManager : NSObject <RCTBridgeModule>
@end
// CalendarManager.m
@implementation CalendarManager
RCT_EXPORT_MODULE();
@end
RCT_EXPORT_METHOD(addEvent:(NSString *)name location:(NSString *)location)
{
//Some work
}
对于Android:
public class CalendarManager extends ReactContextBaseJavaModule {
public CalendarManager(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return "CalendarManager";
}
@ReactMethod
public void addEvent(String name, String location) {
//Some work
}
}
在我的js文件中,如果我有这样的东西:
import { NativeModules } from 'react-native';
NativeModules.CalendarManager.addEvent("Name", "Location")
哪一个会被执行?有没有办法可以根据设备将其路由到正确的功能?
感谢。
答案 0 :(得分:2)
您不必自己做路由。这是构建到React-Native。它知道您正在使用哪种类型的设备。
答案 1 :(得分:1)
React Native根据您在创建应用程序APK或IPA时设置的目标平台打包项目中不同版本的代码。也就是说,当您执行react native run-android
时,它将编译位于android
文件夹中的Android项目中存在的本机Java代码,并使用该文件打包APK。然后,JavaScript将可以访问本机Java代码。使用Objective-C / Swift代码的iOS也是如此。所以是的,你可以(实际上,我必须说你必须)为本机模块使用相同的名称。