react-native : Native modules with same name for both android and iOS

1.4k views Asked by At

I'm trying to build a react-native wrapper around our existing native android and ios SDK. I want to know if I can use the same class name and class methods for both the Android and iOS bridge modules? And how do I map the right module to be called for the right device?

For instance, for 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
}

For 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
  }
}

And in my js file, if I have something like this :

import { NativeModules } from 'react-native';
NativeModules.CalendarManager.addEvent("Name", "Location")

Which one will be executed? Is there a way where I could route it to the right function based on the device?

Thanks.

2

There are 2 answers

0
martinarroyo On BEST ANSWER

React Native packages a different version of the code that you have in your project according to the target platform that you set when you create the application APK or IPA. That is, when you do react native run-android for instance, it will compile the native Java code present in the Android project located in the android folder and pack the APK with that. Then JavaScript will have access to the native Java code. Same thing for iOS with the Objective-C/Swift code. So yes, you can (actually, I'd say you must) use the same name for the native modules.

0
El Chapitan On

You don't have to do that routing yourself. That is build into React-Native. It knows which type of device you're on.