在 Production Mode 下,React 并没有暴露其实例。无论什么原因如果你要获取的话可以参考以下方法。
条件
- 浏览器安装了 React Developer Tools
步骤
以知乎为例
- 打开浏览器 Console,输入
__REACT_DEVTOOLS_GLOBAL_HOOK__
,这是 React Developer Tools 暴露的全局变量。
![c8ba03e1e056615802f0c72ca0d41096.png](https://i-blog.csdnimg.cn/blog_migrate/f303fb83943913644b5fbbf03a0c8dc0.jpeg)
__REACT_DEVTOOLS_GLOBAL_HOOK__
的对象中包含了一个renderers
,找到其中其中的findFiberByHostInstance
方法,右键,然后选择Show function definition
。
![7ce20db21ef05933984636b949588248.png](https://i-blog.csdnimg.cn/blog_migrate/6d0067e305fbb015c89b4a0c9af44cf4.jpeg)
- 浏览器会跳到 Sources Tab 中,点击左下角 Pretty print。
![d780478f6ce9b685212329d7cb99b3c8.png](https://i-blog.csdnimg.cn/blog_migrate/0c3d2c4fe741e4daf6c8809ee4f8fac4.jpeg)
- 在
findFiberByHostInstance
对应的文件就是 ReactDOM 所在的文件,然后在这个文件中搜索(ctrl + f)createElement
方法,这就是 React 本身包含的方法。在搜索结果中找到类似如下的位置,加断点。
![e458eaa6e3ad285d444a34df7605b8e1.png](https://i-blog.csdnimg.cn/blog_migrate/4cc36e760f74e9a9b727921b13a202d9.jpeg)
- 刷新浏览器,在浏览器断点暂停后,对应的例如上面的
a.a
就是 React 实例了,可以在 Console 中打印看看。如果没有断点暂停,说明代码并没有运行到,可以更换createElement
方法出现的位置加断点。
![36de77b2c0e1d8d616c72f1f505919fe.png](https://i-blog.csdnimg.cn/blog_migrate/ff12f8562377b7ffcbaa84b3327f5115.jpeg)