react-native :android 和 iOS 具有相同名称的本机模块
react-native : Native modules with same name for both android and iOS
我正在尝试围绕我们现有的原生 android 和 ios SDK 构建一个 react-native 包装器。我想知道是否可以对 Android 和 iOS 桥模块使用相同的 class 名称和 class 方法?我如何映射正确的模块以供正确的设备调用?
例如,对于 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")
哪一个会被处决?有没有一种方法可以根据设备将其路由到正确的功能?
谢谢。
您不必自己进行路由。那是内置在 React-Native 中的。它知道您使用的是哪种类型的设备。
React Native 会根据您在创建应用程序 APK 或 IPA 时设置的目标平台来打包您项目中的不同版本的代码。也就是说,例如,当您执行 react native run-android
时,它将编译位于 android
文件夹中的 Android 项目中存在的本机 Java 代码,并将其打包到 APK 中。然后 JavaScript 将可以访问本机 Java 代码。 iOS 与 Objective-C/Swift 代码相同。所以是的,您可以(实际上,我会说您必须)对本机模块使用相同的名称。
我正在尝试围绕我们现有的原生 android 和 ios SDK 构建一个 react-native 包装器。我想知道是否可以对 Android 和 iOS 桥模块使用相同的 class 名称和 class 方法?我如何映射正确的模块以供正确的设备调用?
例如,对于 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")
哪一个会被处决?有没有一种方法可以根据设备将其路由到正确的功能?
谢谢。
您不必自己进行路由。那是内置在 React-Native 中的。它知道您使用的是哪种类型的设备。
React Native 会根据您在创建应用程序 APK 或 IPA 时设置的目标平台来打包您项目中的不同版本的代码。也就是说,例如,当您执行 react native run-android
时,它将编译位于 android
文件夹中的 Android 项目中存在的本机 Java 代码,并将其打包到 APK 中。然后 JavaScript 将可以访问本机 Java 代码。 iOS 与 Objective-C/Swift 代码相同。所以是的,您可以(实际上,我会说您必须)对本机模块使用相同的名称。