好吧,谜团解开了。
秘密位于 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
在我自己的项目中,从一个基本的 create-react-app 应用程序复制而来。
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
moduleName:@"ExampleProject"
initialProperties:nil
launchOptions:launchOptions];
编辑 1:好的,我可能还有另一个问题。它不适用于 javascript 重新加载,因此仅在应用程序第一次运行时。当启用远程 JS 调试时,它也根本不起作用。奇怪的...