【问题标题】:Not able to call ios native module from React native project无法从 React 本机项目调用 ios 本机模块
【发布时间】:2018-07-06 10:59:22
【问题描述】:

你好朋友,我想在 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') 之类的错误

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

【问题讨论】:

    标签: react-native react-native-ios native-module react-native-native-module


    【解决方案1】:

    因此,在您的本机代码中,您实际上必须将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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 1970-01-01
      • 2019-10-05
      相关资源
      最近更新 更多