从其他原生代码访问 React Native 模块
Posted
技术标签:
【中文标题】从其他原生代码访问 React Native 模块【英文标题】:Accessing a React Native module from other native code 【发布时间】:2015-12-07 18:08:02 【问题描述】:我使用native module,它非常适合在 React Native 中的 JS 代码中获取设备信息。我还想在其他本机(Objective-C)代码中使用它的功能。
是否可以从其他原生代码访问 React Native 自定义模块的功能?
【问题讨论】:
【参考方案1】:您可以直接访问该功能(使用-[RNDeviceInfo deviceName]
方法)或使用 React Native 访问它的方式,即:
RNDeviceInfo *rn = [[RNDeviceInfo alloc] init];
NSLog(@"Device Name: %@", [rn constantsToExport][@"model"]);
【讨论】:
为了完善这一点,this 也可以工作,我认为通过不实例化相关类的第二个副本来减少开销。在 AppDelegate_bridge = rootView.bridge;
中保存对桥的引用,然后通过它访问模块 NSString *deviceName = [_bridge.modules[@"RNDeviceInfo"] constantsToExport][@"model"];
。注销:NSLog(@"Device Name: %@", deviceName);
你跟我一起学习吧。由于 bridge.modules
的弃用以支持延迟加载模块 NSString *deviceName = [[_bridge moduleForName:@"RNDeviceInfo"] constantsToExport][@"model"];
,此调用现已更改【参考方案2】:
我找到了一个解决方案,诚然这有点麻烦。它确实有效,但我认为这远非理想。
在使用此代码的类的顶部:
@interface RNDeviceInfo ()
- (NSString*) deviceName;
@end
然后我可以这样使用它:
RNDeviceInfo *rn = [[RNDeviceInfo alloc] init];
NSLog(@"Device Name: %@", [rn deviceName]);
【讨论】:
以上是关于从其他原生代码访问 React Native 模块的主要内容,如果未能解决你的问题,请参考以下文章
React-Native开发之原生模块封装(Android)升级版
React Native在原生和React Native间通信
React Native iOS原生模块开发实战|教程|心得|如何创建React Native iOS原生模块
React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块