【问题标题】:react-native : Native modules with same name for both android and iOSreact-native : android 和 iOS 同名的原生模块
【发布时间】:2017-01-07 03:51:12
【问题描述】:

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

对于安卓:

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-android react-native-ios native-module


    【解决方案1】:

    您不必自己进行该路由。这是内置在 React-Native 中的。它知道您使用的是哪种类型的设备。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-27
        • 1970-01-01
        • 2019-02-25
        • 2022-11-11
        • 2018-02-23
        • 2020-02-13
        相关资源
        最近更新 更多