javascript - 为什么尝试访问 React 组件的类名会导致 ReferenceError ?

标签 javascript reactjs ecmascript-6 scope lifetime

这是我在 index.js 中的 React 组件:

import React from 'react'
import ReactDOM from 'react-dom'

class App extends React.Component {
  render() {
    return (
      <div className="App">
        <h1>Hello, World!</h1>
      </div>
    )
  }
}

ReactDOM.render(<App />, document.getElementById('root'))

当我使用 npm start 运行此命令并访问 http://localhost:3000/ ,我确实在网页中得到了所需的输出“Hello,World!”。现在我右键单击页面,选择“Inspect”以打开 Chrome DevTools。在控制台中,我输入 App 但收到错误。

> App
(x) VM154:1 Uncaught ReferenceError: App is not defined
    at <anonymous>:1:1

为什么App没有定义?

当我检查“查看页面源代码”时,我看到这些源代码:

<!DOCTYPE html>
<html lang="en">
  ...
  <script src="/static/js/bundle.js"></script><script src="/static/js/0.chunk.js"></script><script src="/static/js/main.chunk.js"></script></body>
</html>

当我查看 http://localhost:3000/static/js/main.chunk.js 的来源时,我在源代码中看到了这一点:

var App =
/*#__PURE__*/
function (_React$Component) {
...

所以 App 应该定义在这个页面中,对吗?当我尝试在 DevTools 控制台中访问它时,为什么仍然收到 ReferenceError

我知道我可以使用 React DevTools 来调试 React 组件。但这不是我的问题。我的问题是关于我在 React 中定义的类的范围和生命周期。为什么 App 类定义在页面加载时不存在?

最佳答案

在控制台中输入“App”将尝试访问 window.App,但 window.App 不存在。 App 是一个变量,它是定义它的模块的本地变量。您的代码由 webpack 转译,但转译后它仍然是一个本地变量,只是由闭包而不是模块强制执行。

不过你还有选择。尝试使用浏览器的开发人员工具在代码中设置断点。当它暂停在那里时,在控制台中输入应该能够访问暂停处范围内的局部变量。

关于javascript - 为什么尝试访问 React 组件的类名会导致 ReferenceError ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55779938/

相关文章:

javascript - linters 是否能够捕获函数名称中的拼写错误?

javascript - Angular JS ng-table日期范围过滤器问题

reactjs - react 还原: Cannot set on an immutable record

javascript - react : How to select multiple images using react-image-picker

javascript - 如何在useEffect和window.addEventListener中设置react useState

javascript - 为什么 fetch 返回 302 状态码而 XHR 没有?

javascript - 为什么我在行驶路线时收不到数据?

javascript - 找不到 Ajax 返回的元素

javascript - 根据用户选择问题实时更新

javascript - 如何在 react 中合并传递 Prop 和默认 Prop ?