如何从一个RCTBridge识别许多RCTRootViews

时间:2016-06-30 13:11:37

标签: ios react-native

我有很多RCTRootViews在许多UIViewControllers中。他们共享相同的RCTBridge。

我检查源代码,发现RCTUIManager用Key" ReactTag"存储所有RCTRootViews。

其中一个RCTRootViews有一个TouchableHighlight组件。它的onPress()通过RCTBridge调用CustomNativeModule。

当RCTBridge接收来自TouchableHighlight的js代码的电话时。我无法找到它所属的RCTRootView。

我想我可能会得到" root ReactTag"所以我可以从RCTUIManager找到合适的RCTRootView。

但我不知道如何获得" root ReactTag"在TouchableHighlight的onPress()函数中。

我不擅长js,我检查了js源代码并找到了一种奇怪的方法 var root = this.children._owner._rootNodeID; var nativeTopRootID = ReactNativeTagHandles.getNativeTopRootIDFromNodeID(root); var reactTag = ReactNativeTagHandles.rootNodeIDToTag[nativeTopRootID];

它看起来就像我想要的那样,反应标签'我可以从RCTUIManager获得正确的RCTRootView。

但是,以这种方式感觉很奇怪。

当共享相同的RCTBridge时,是否有更好的方法可以从许多RCTRootView中重新识别一个RCTRootView?

1 个答案:

答案 0 :(得分:0)

好吧我发现在js中写了onPress(事件)。 使用事件参数。

@RunWith(MockitoJUnitRunner.class)
public class MyBeanTest {

  @Spy
  private Logger logger = LoggerProducer.getLogger();

  @InjectMocks
  private MyBean myTestBean; // = new MyBean(parameters). explicit if no default constructir

  @Test
  public void verifySomeLogic() {
    myTestBean.doSomething();
  }
}

我认为它比使用.children._owner._rootNodeID

更好