Reaction-native: Родные модули с одинаковым именем для Android и iOS

Я пытаюсь создать оболочку реагирующего на наш существующий Android и SDK ios. Я хочу знать, могу ли я использовать одно и то же имя класса и методы класса для мостовых модулей 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 ответа

Решение

React Native упаковывает другую версию кода, имеющуюся в вашем проекте, в соответствии с целевой платформой, которую вы указали при создании приложения APK или IPA. То есть когда ты делаешь react native run-android например, он скомпилирует нативный код Java, присутствующий в проекте Android, расположенном в android папку и упакуйте APK с этим. Тогда у JavaScript будет доступ к нативному коду Java. То же самое для iOS с кодом Objective-C/Swift. Так что да, вы можете (на самом деле, я бы сказал, вы должны) использовать то же имя для нативных модулей.

Вам не нужно делать это самостоятельно. Это встроено в React-Native. Он знает, на каком устройстве вы находитесь.

Другие вопросы по тегам