我正在尝试理解iOS本机模块,该模块的代码是由djinni生成的。
根据React Native Doc,您必须在代码中包含RCT_EXPORT_MODULE()
宏。这个有效的样本没有。
稍后的文档中,据说例外是迅速,没有这样的宏。
除非我错了,否则不是这样。
我正在尝试复制我自己的项目中生成代码的使用,但是当我运行它时,它失败了,因为React Native无法加载我的本机模块:
未定义不是一个对象(评估" helloworld.gethelloworld"(
我想知道我是否可以逐步浏览NativeModule请求代码:
var HelloWorld = NativeModules.HelloWorld;
了解发生了什么。
感谢您的帮助。
解决了所有正确的神秘。
秘密位于AppDelegate实现中:
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:moduleInitialiser launchOptions:nil];
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
moduleName:@"ExampleProject"
initialProperties:nil];
rctrootview指针以
调用来初始化initwithbridge
当然,您必须以前分配rctbridge对象。
在该用例中不需要RCT_Export_Module
宏,您只需要提供模块名称:
+ (NSString *)moduleName
{
return @"HelloWorld";
}
宏自动为您做到这一点。
我仍在使用:
initwithBundleurl
在我自己的项目中,从基本的创建反应应用程序重复。
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
moduleName:@"ExampleProject"
initialProperties:nil
launchOptions:launchOptions];
编辑1 :好的,我可能还有另一个问题。它在JavaScript Relooad上不起作用,因此只有该应用程序首次运行。当启用远程JS调试时,它也根本不起作用。奇怪...