Reactjs 是否可以检索组件';这是一个反应纤维的例子吗?

Reactjs 是否可以检索组件';这是一个反应纤维的例子吗?,reactjs,react-fiber,Reactjs,React Fiber,在React的v16之前——也就是说,在引入React光纤之前——可以获取DOM元素并检索React组件实例,如下所示: const getReactComponent = dom => { let found = false; const keys = Object.keys(dom); keys.forEach(key => { if (key.startsWith('__reactInternalInstance$')) { const com

在React的v16之前——也就是说,在引入React光纤之前——可以获取DOM元素并检索React组件实例,如下所示:

const getReactComponent = dom => {
  let found = false;
  const keys = Object.keys(dom);

  keys.forEach(key => {
    if (key.startsWith('__reactInternalInstance$')) {
      const compInternals = dom[key]._currentElement;
      const compWrapper = compInternals._owner;
      const comp = compWrapper._instance;
      found = comp;
    }
  });

  return found || null;
};
这不再适用于使用新光纤实现的React v16。具体地说,上面的代码在行
const comparWrapper=compInternals.\u owner
处抛出一个错误,因为不再有
\u owner
属性。因此,您也无法访问
\u实例


我这里的问题是如何从v16的光纤实现中的DOM元素中检索实例?

您可以尝试下面的函数(更新后可用于React key.startsWith(“\uu reactInternalInstance$”)); 让internalInstance=dom[key]; if(internalInstance==null)返回null; if(internalInstance.return){//react 16+ 返回internalInstance.\u debugOwner ?internalInstance.\u debugOwner.stateNode :internalInstance.return.stateNode;
}否则{//react为什么不?可能重复的@AbdennourTOUMI:这不是重复的,因为此人没有处理react pre v16之间的差异。@Oridori:您想详细说明一下吗?@Oridori:是的,但这不是我需要做的。我需要以编程方式从包含组件的DOM元素中检索组件对象。