即使我的client.js没有使用它,为什么必须导入“反应”

时间:2016-04-07 03:17:11

标签: reactjs

当我没有在我的client.js中导入“React”时,我正在学习React并且在我的代码不起作用时感到困惑。理想情况下,当我在代码中不使用“React”时,我不应该强制导入“react”模块。以下是代码段。

Layout.js:

import React from "react";

export  default class Layout extends React.Component {
  constructor () {
    super();
    this.name = "Dilip";
  }
  render () {
    return (
      <h1>Welcome {this.name} in React world !!</h1>
    )
  }
}

工作代码:

import React from "react";
import ReactDOM from "react-dom";

import  Layout from "./components/Layout"

const app = document.getElementById('app');
ReactDOM.render(<Layout/>, app);

不工作代码:

import ReactDOM from "react-dom";

import  Layout from "./components/Layout"

const app = document.getElementById('app');
ReactDOM.render(<Layout/>, app);

当我删除导入“React”的代码时,为什么它不起作用?我没有在任何地方使用“React”因此它应该工作。它在控制台中抛出以下错误。

Uncaught ReferenceError: React is not defined

注意:我正在关注video

2 个答案:

答案 0 :(得分:11)

@Matteo错了。虽然ReactDOM确实取决于React,但它需要在自己的代码中使用它。

您需要导入React的真正原因是JSX摘要:

<Layout/>

只有语法糖:

React.createElement(Layout)

因此,在JSX编译之后,实际上需要React。 ;)

答案 1 :(得分:1)

ReactDOM依赖于React。 From NPM Package Manager,你可以看到你需要在夫妻中使用:

  

npm install 反应 react-dom

描述谈到:

  

它旨在与同构的React配对,它将是   作为对npm的反应而发货。

希望这澄清