你如何在控制台中检查反应元素的道具和状态?

How do you inspect a react element's props & state in the console?

React Developer Tools 赋予了很多权力来检查 React 组件树,并查看道具、事件处理程序等。但是,我真正想做的是能够检查这些数据浏览器控制台中的结构。

在 chrome 中,我可以使用 [=10=] 在控制台中使用当前选择的 DOM 元素。有没有办法从 [=10=] 中提取 React 组件信息,或者是否可以使用 React Dev Tools 做类似的事情?

你的问题的答案可以在我问过的类似问题中找到:

我在这里提供一个答案,因为我没有必要的信誉点数来标记为重复或在上面发表评论。

基本上,如果您使用的是 React 的开发版本,这是可能的,因为您可以利用 TestUtils 来实现您的目标。

你只需要做两件事:

  • 静态存储您从 React.render() 获得的根级组件。
  • 创建一个全局调试辅助函数,您可以在控制台中使用 $0 访问您的静态组件。

所以控制台中的代码可能类似于:

> getComponent([=10=]).props

getComponent 的实现可以使用 React.addons.TestUtils.findAllInRenderedTree 通过在所有找到的组件上调用 getDOMNode 并与传入的元素进行匹配来搜索匹配项。

将状态或道具对象分配给 window 对象:

window.title = this.state.title

然后您可以从开发工具控制台对暴露的对象尝试不同的方法,例如:

window.title.length

8

使用 React Developer Tools 您可以使用 $r 获取对 selected React 组件的引用。

下面的屏幕截图向您展示了我使用 React Developer Tools 到 select 一个组件 (Explorer),它有一个名为 nodeList 的状态对象。在控制台中,我现在可以简单地编写 $r.state.nodeList 来引用状态中的这个对象。同样适用于道具(例如:$r.props.path

打开控制台(Firefox,Chrome)并定位任何 reactjs 呈现的 DOM 元素或执行 js 脚本来定位它:

document.getElementById('ROOT')

然后检查对象 属性 查看器中的元素属性,以查找名称以“__reactInternalInstace$....”开头的属性展开 _DebugOwner 并查看 stateNode。

找到的 stateNode 将包含(如果有)'state' 和 'props' 属性,这些属性在 reactjs 应用程序中被大量使用。

虽然接受的答案有效,而且是一种很好的方法,但在 2020 年,您现在可以在不使用 $r 方法的情况下进行大量检查。当你 select 相关组件(确保你在正确的级别)时,React DevTools 的 Components 选项卡将显示道具和详细状态,并让你做其他事情,如暂停它或检查匹配DOM 元素(右上角的小图标)。

您可以附加对 window 对象的引用,例如

import { useSelector } from "react-redux";
function App() {

    // Development only
    window.store = useSelector((state) => state);

    return (
        <div className="App">
        </div>
    );
}

export default App;

然后从控制台访问它

store
{states: {…}}
states:
someProperty: false
[[Prototype]]: Object
[[Prototype]]: Object

[控制台][1] [1]: https://i.stack.imgur.com/A4agJ.png