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 代码相同。所以是的,您可以(实际上,我会说您必须)对本机模块使用相同的名称。