浅谈React中Fiber、DOM、ReactElement实例对象的引用关系本文探讨了Fiber、DOM、ReactElement、类组件实例对象的引用关系。React版本为18.2.0原生组件fiber原生组件fiber是指类型为“span”或“div”的fiber。fiber.stateNode指向真实的DOM节点。节点["__reactFiber$"+randomKey]。node["__reactProps$"+randomKey]指向最新的props对象。类组件fiberfiber.stateNode指向类实例对象实例。instance.__reactInternalSnapshotBeforeUpdate指向快照对象(该对象由getSnapshotBeforeUpdate生成并提供给componentDidUpdate)。使用DOM节点的['__reactFiber$'+randomKey]属性,我们可以得到对应的原生组件fiber。通过这个fiber,我们实际上得到了整棵fiber树。比如我们可以通过递归访问fiber.return找到它所在的类组件或者函数组件fiber。在控制台选择一个元素,然后输入$0.__reactFi按tab键完成属性,然后回车,我们得到一个原生组件fiber。通过这个小技巧,我们可以观察到使用React的网站的fiber树结构,比如figma。如果React版本太低,则没有此属性。根纤维根纤维是纤维树的根节点。fiberRoot是fiber树根节点的维护者,它的current决定了使用两个fiber树中的哪一个(使用双缓冲技术)。fiberRoot.current指向一个rootFiber节点。rootFiber.stateNode指向fiberRoot。rootNode["__reactContainer$"+randomKey]指向rootFiber。ReactElementReactElement的_owner指向最近的上层类组件或函数组件fiber。
