为什么要导入 React

IT技术 reactjs react-jsx es6-modules
2021-05-23 13:32:02

我的代码仅在导入 React 后才有效,但我没有在任何使用 reactDom 的地方使用 React

import ReactDOM from 'react-dom'
import React, {Component} from 'react'

class App extends Component {
  render () {
    return (
      <div>comp </div>
    )
  }
}

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

为什么需要导入 React ?

4个回答

尽管您没有明确使用您导入的 React 实例,但 JSX 被转换为React.createElement()调用,它使用它。

在您的示例中,<div>comp </div>由 Babel 转译为React.createElement('div', null, 'comp').

这是一个非常有趣的问题,因为您说得对,代码看起来不像使用 React,但它很棘手。

任何时候使用速记<Component />代码时,实际发生的情况都是 Babel 将 JSX 转换为常规 Javascript 的内容。

<Component/>
// Is turned into
React.createElement(...)

因此,代码确实需要应对进口,虽然不是很明显读者

需要 React 导入,因为以下 JSX 代码:-

(
   <div>comp </div>
)

被转译为

React.createElement(
  "div",
  null,
  "comp "
);

这就是你需要导入 React 的原因;我希望这能回答你的问题。

你可以随时参考https://babeljs.io来了解什么被转换成什么。

对于 React 17 之前的React 版本或不包括新 JSX 转换的指定旧主要版本(参见博客),JSX 转换需要在每个组件文件中导入 React。然而在 React 17 和一些指定的旧版本(包括新的转换)中,这不再是必要的,因为它的新转换不需要它。

参考:https : //reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html