Reactjs 为什么要进口

Reactjs 为什么要进口,reactjs,react-jsx,es6-modules,Reactjs,React Jsx,Es6 Modules,我的代码只有在导入React之后才能工作,但我没有在任何地方使用React,而是使用reactDom import ReactDOM from 'react-dom' import React, {Component} from 'react' class App extends Component { render () { return ( <div>comp </div> ) } } //ReactDOM.render(<

我的代码只有在导入React之后才能工作,但我没有在任何地方使用React,而是使用reactDom

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 dom”导入ReactDOM
从“React”导入React,{Component}
类应用程序扩展组件{
渲染(){
返回(
公司
)
}
}
//ReactDOM.render(,document.getElementById('root'))
render(sv,document.getElementById('root'))

为什么需要导入React???

尽管您没有显式地使用您导入的React实例,但JSX被传输到调用,调用将使用它


在您的示例中,Babel将
comp
传输到
React.createElement('div',null,'comp')
,我以前认为,如果ReactDOM使用React,那么它将负责导入它。但事实并非如此。在源代码中的JSX被转换之后,很明显它是显式使用React包的。因此它是必需的

React.createElement('div', null, 'comp')

React导入是必需的,因为以下JSX代码:-

(
   <div>comp </div>
)
这就是您需要导入React的原因; 我希望这能回答你的问题


您可以随时参考以了解get转换成了什么。

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

任何时候使用速记
代码时,实际发生的是由Babel将JSX转换成常规Javascript

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

//变成
React.createElement(…)

因此,确实需要导入React代码,尽管读者并不清楚,如果使用JSX DSL,您需要导入React(几乎每个人都这样做)

根据其他答案,transpiler通常会将JSX标记更改为

React.createElement(…)


因此,对于React 17之前的React版本或指定的不包括新JSX转换的较旧主要版本(请参阅),您实际使用的是React:)

,在每个组件文件中导入React对于JSX转换是必要的。但是,在React 17和一些指定的旧版本(包括新转换)中,这不再是必需的,因为它的新转换不需要它


参考资料:

我只是好奇地问一下导入在这里到底做了什么,它需要整个react包代码并粘贴到文件中,否则它会从react中获取参考资料,它到底做什么,请有人详细说明一下。
<Component/>
// Is turned into
React.createElement(...)