当前位置: 首页 > 知识库问答 >
问题:

无法从React本机项目调用ios本机模块

满伟彦
2023-03-14

朋友们好,我想让我的插件在react native中,我想从我的react native js文件调用我的ios native module函数,下面是我的代码

ios库代码如下

@implementation RNMyLib

- (dispatch_queue_t)methodQueue{
   return dispatch_get_main_queue();
 }
RCT_EXPORT_MODULE()


 RCT_EXPORT_METHOD(findEvents:(RCTResponseSenderBlock)callback)
 {
    NSString * strName = @"findEvents";

   callback(strName);
}

JS文件代码如下

 import { NativeModules } from 'react-native';

 var MyLibManager = NativeModules.RNMyLib;

 MyLibManager.findEvents((strName) => {
    console.log("GET FUN CODE >>>>> "+ strName);
 });

我只想从我的js文件调用简单的函数到ios本机库类,但当我运行上面的代码时,我得到了像TypeError这样的错误:未定义不是一个对象(评估“MyLibManager.find事件”)

知道我该怎么解决这个问题吗?你的所有建议都适用

共有1个答案

颛孙哲
2023-03-14

因此,在本机代码中,实际上必须将NSArray传递回回调。有点像这样。

RCT_EXPORT_METHOD(findEvents:(RCTResponseSenderBlock)callback)
{
  NSArray *events = ...
  callback(@[[NSNull null], events]);
}

NSArray中的第一个元素是您传递错误的机会。在您的情况下,它总是会解析,因此只需将其保持为[NSNull null]。示例中的第二个参数而不是事件将是您的strName

从JS方面来看,回调实际上是一个传统的节点回调,它将错误作为第一个参数,并在第二个参数中解析实际项目。所以相反,

MyLibManager.findEvents((_, strName) => {
    console.log("GET FUN CODE >>>>> "+ strName);
})

如果您更喜欢promise模式,可以使用以下选项:

RCT_REMAP_METHOD(findEvents,
                 findEventsWithResolver:(RCTPromiseResolveBlock)resolve
                 _:(RCTPromiseRejectBlock)reject) // I like to leave this as _ if it never fails
{
  NSString *strName = @"findEvents";
  resolve(strName);
}

来自JS。

const strName = await MyLibManager.findEvents;
 类似资料:
  • 我想从本机模块调用react本机函数。 我已经为我的react原生应用程序创建了一个条形码扫描仪插件,条形码扫描仪SDK在原生IOS中可用 现在我的问题是,一旦条形码扫描仪扫描数据并发送到本机IOS,我如何在我的反应本机应用程序中获取这些扫描数据?(我在IOS本机中获得了扫描数据) 我想在本机模块扫描数据并将这些数据发送到react-本机时调用react-本机应用程序函数 请给出例子或适当的文件,

  • 我想启动一个新的React原生项目,包括SQLite Storagee。 我以前已经做过了,所以我知道它应该能用,但今天不行。。。 因此,我启动了一个新项目,在该项目中,我按照本教程的步骤安装了react原生sqlite存储(https://www.npmjs.com/package/react-native-sqlite-storage),android部分。 一切都很好,直到我运行我的项目反应

  • 您好,我遵循了在windows上设置React本机项目的官方文档。我在location中添加了ANDROID_HOME变量作为系统变量 在第二步中,我应该在 “C:\Android\tools\bin\platform tools” 但是Android中没有tools文件夹,我发现SDK下的平台工具就在下面 "C:\用户\AKSHAY\AppData\本地\Android\SDK\平台工具" 现在

  • 目标:开发一个跨平台设计系统,将其导入任何平台(React、React Native、Android、iOS)。 我们得到的工作:在React Native中开发的一个项目,其中开发了一些核心UI组件,以确保视觉效果在所有其他项目中保持一致。该项目作为依赖项导入到另一个成功使用这些组件的React Native应用程序中。到目前为止还不错。 我们卡住的地方:我们想在原生项目(Android和iOS

  • 在这个构建中使用了不推荐的Gradle特性,使其与Gradle7.0不兼容。使用“--Warning-Mode All”显示各个弃用警告。请参见https://docs.gradle.org/6.5/userguide/command_line_interface.html#sec:command_line_warnings440可操作任务:22个已执行,418最新注意:c:\users\stef

  • 你好,我正面临一个问题与世博反应本地。每当我试图启动iOS模拟器。我得到这个错误: 世博会结果截图 我的NPM版本是6.7。0本机cli:2.0。1:0.57。1世博会版本2.11。9 此外,我还确保我在Xcode上的命令行工具是完全由Xcode命令行工具设置的 最后,我还尝试运行命令 什么都不管用。。