我有许多RCTRootViews在许多UIViewControllers.They共享相同的RCTBridge。
我检查了源代码,发现RCTUIManager存储了所有键为"ReactTag“的RCTRootViews。
其中一个RCTRootViews有一个TouchableHighlight组件。这是onPress()通过RCTBridge调用CustomNativeModule。
当RCTBridge收到来自TouchableHighlight的js代码的调用时。我找不到它属于哪个RCTRootView。
我想我可以得到“根ReactTag",这样我就可以从RCTUIManager中找到正确的RCTRootView。
但是我不知道如何在TouchableHighlight的onPress()函数中获得“根ReactTag”。
我不擅长js,我查看了js的源代码,发现了一种奇怪的var root = this.children._owner._rootNodeID; var nativeTopRootID = ReactNativeTagHandles.getNativeTopRootIDFromNodeID(root); var reactTag = ReactNativeTagHandles.rootNodeIDToTag[nativeTopRootID];方法
这似乎就是我想要的,有了这个'reactTag‘,我就可以从RCTUIManager中得到正确的RCTRootView。
但是,在这种情况下感觉很奇怪。
当多个RCTRootView共享相同的RCTBridge时,有没有更好的方法从多个RCTRootViews中识别出一个RCTBridge?
发布于 2016-07-03 20:54:48
好的,我发现在js中写事件(OnPress)。使用事件参数。
var marker = event.dispatchMarker;
var rootID = ReactNativeTagHandles.getNativeTopRootIDFromNodeID(marker);
var rootTag = ReactNativeTagHandles.rootNodeIDToTag[rootID];我觉得这比用.children._owner._rootNodeID要好
https://stackoverflow.com/questions/38124179
复制相似问题