你好朋友,我想让我的插件成为react native,我想从我的react native js文件中调用ios native模块功能,所以下面是我的代码
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不是对象(评估'MyLibManager.findEvents')的错误
你知道我该怎么解决吗?您的所有建议均适用
答案 0 :(得分: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;