react-native:android和iOS同名的本机模块

时间:2017-01-06 14:45:03

标签: react-native react-native-android react-native-ios native-module

我正在尝试围绕我们现有的原生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")

哪一个会被执行?有没有办法可以根据设备将其路由到正确的功能?

感谢。

2 个答案:

答案 0 :(得分:2)

您不必自己做路由。这是构建到React-Native。它知道您正在使用哪种类型的设备。

答案 1 :(得分:1)

React Native根据您在创建应用程序APK或IPA时设置的目标平台打包项目中不同版本的代码。也就是说,当您执行react native run-android时,它将编译位于android文件夹中的Android项目中存在的本机Java代码,并使用该文件打包APK。然后,JavaScript将可以访问本机Java代码。使用Objective-C / Swift代码的iOS也是如此。所以是的,你可以(实际上,我必须说你必须)为本机模块使用相同的名称。