我有很多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?
答案 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
更好