我从另一个stackoverflow主题(调用渲染外的儿童方法(复制了此功能,并且它在一个小测试项目中起作用
window.FindReact = function(dom) {
for (var key in dom) {
if (key.startsWith("__reactInternalInstance$")) {
var compInternals = dom[key]._currentElement;
var compWrapper = compInternals._owner;
var comp = compWrapper._instance;
return comp;
}
}
return null;
};
我做了一个在屏幕中间显示消息框的课程(淡入淡出;显示味精几秒钟;然后淡出(
,我可以通过上述功能来调用该方法直接显示子组件的消息。所以一切都很好。
然后,我将该对象(MessageBox(复制到我的主要项目,并将上述功能复制到父对象。当我打电话给它时,没有钥匙...好吧,不是我正在寻找
的钥匙我列出了工作和失败项目的密钥。除第一个键(失败项目中缺少(
外,所有键均相同。key=__reactInternalInstance$bv23g7yipka
失败项目有效,没有错误,消息组件也有效(可以从内部调用以显示消息(
我真的不知道为什么会失败(键丢失(,希望你们中的某些人会做。
如果您使用的是使用React 17,则可以尝试" __ reactFiber"而不是" __ reactInternalinstance"。似乎React在React 17中更改了此属性名称。
我检查了package.js,并注意到了所有模块的不同版本。因此更新了它们(react/react-dom/webpack/babel-loader(然后它起作用:(