一个应用程序中的两个RCTRootView实例

时间:2016-01-01 00:39:36

标签: ios react-native

我正在编写一个有两个视图的iOS应用。每个视图都是一个RCTRootView,由不同的React Native组件创建。

我调查了这个问题(Multiple RCTRootView in a single App)所以现在我明白这是可能的。

但是有一个问题。让第一个RCTRootView实例为B,让第二个实例为B. A首先显示在屏幕上,其反应本机对应物使用NativeAppEventEmitter从我的本机应用程序接收事件。在这一点上,一切正常。 A还有一个按钮,用于在屏幕上显示B.

按下按钮时,将创建并显示B.再次按下该按钮时,B将从其超视图中移除并销毁。

但在此之后,NativeAppEventEmitter什么都不做。

欢迎任何类型的提示或评论。

1 个答案:

答案 0 :(得分:1)

此问题与self.bridge为零的症状有关。虽然我做了@synthesize bridge = _bridge,但是当从javascript端处理事件时,bridge属性为nil,这是意料之外的。

通过检查和网上冲浪,我找到了原因:对于RCTBridgeModule,对象的生命周期很难通过objective-c代码来控制。关于桥接模块的最佳实践是忘记有关其生命周期的所有细节,并且不对其生命周期做出任何假设。

因此,如果您自己创建了桥模块(可能使用handleMessage),则应用程序中可能会有两个不同的桥对象。您无法确定哪个对象是从javascript端接收事件的对象。

因此,我现在正在使用以下解决方案。

[MyBridge new]