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. Он знает, на каком устройстве вы находитесь.