为什么尝试访问 React 组件的 class 名称会导致 ReferenceError?
Why trying to access the class name of a React component lead to ReferenceError?
这是我在 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!"。现在我右键单击页面,select "Inspect" 打开 Chrome DevTools。在控制台中,我键入 App
但出现错误。
> App
(x) VM154:1 Uncaught ReferenceError: App is not defined
at <anonymous>:1:1
为什么 App
没有定义?
当我检查 "View Page Source" 时,我看到这些来源:
<!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 中定义的 class 的范围和生命周期。为什么 App
class 定义在页面加载时不生效?
在您的控制台中键入 "App" 将尝试访问 window.App
,但 window.App
不存在。 App 是一个变量,它在定义它的模块中是本地的。你的代码被 webpack 转译,但在转译之后它仍然是一个局部变量,只是它是由闭包而不是模块强制执行的。
虽然你有选择。尝试使用浏览器的开发人员工具在代码中设置断点。当它在那里暂停时,在控制台中键入应该能够访问在暂停位置范围内的局部变量。
这是我在 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!"。现在我右键单击页面,select "Inspect" 打开 Chrome DevTools。在控制台中,我键入 App
但出现错误。
> App
(x) VM154:1 Uncaught ReferenceError: App is not defined
at <anonymous>:1:1
为什么 App
没有定义?
当我检查 "View Page Source" 时,我看到这些来源:
<!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 中定义的 class 的范围和生命周期。为什么 App
class 定义在页面加载时不生效?
在您的控制台中键入 "App" 将尝试访问 window.App
,但 window.App
不存在。 App 是一个变量,它在定义它的模块中是本地的。你的代码被 webpack 转译,但在转译之后它仍然是一个局部变量,只是它是由闭包而不是模块强制执行的。
虽然你有选择。尝试使用浏览器的开发人员工具在代码中设置断点。当它在那里暂停时,在控制台中键入应该能够访问在暂停位置范围内的局部变量。