0

你好朋友我想让我的插件在 react native 中我想从我的 react native js 文件中调用我的 ios 本机模块函数所以下面是我的代码

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: undefined is not an object (evalating 'MyLibManager.findEvents') 的错误

知道如何解决这个问题吗?你的所有建议都适用

4

1 回答 1

0

因此,在您的本机代码中,您实际上必须将一个NSArray回传给callback. 有点像这样。

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

中的第一个元素NSArray是您传递错误的机会。在您的情况下,它总是可以解决,所以只需将其保留为[NSNull null]. 示例中的第二个参数events将是您的strName.

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

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;
于 2018-07-06T12:26:11.227 回答