2016-04-07 39 views
3

我正在學習React,並且當我的代碼在我的客戶端中沒有導入「React」時無法工作時,我很困惑。 JS。理想情況下,當我在代碼中不使用「React」時,我不應該強制導入「react」模塊。以下是代碼片段。爲什麼即使我的client.js沒有使用它,也必須導入「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」,因此它應該可以工作。它在控制檯中引發以下錯誤。

Uncaught ReferenceError: React is not defined 

注:我下面video

+0

ReactDOM取決於反應 – Matteo

+0

使用ReactDOM React – Yon

+0

據我瞭解,但當我使用「ReactDOM」時,它對新用戶不可見。如果它取決於「反應」,那麼它應該作爲參數。 – joy

回答

8

@Matteo是錯誤的。雖然ReactDOM確實取決於React,但它需要將其本身用於其代碼中。

的,爲什麼你需要導入React的真正原因,是JSX片段:

<Layout/> 

只是句法糖:

React.createElement(Layout) 

因此,JSX編譯後,反應有效地需要。 ;)

+2

這是有道理的。由於JSX使用快捷鍵語法,因此「React」在語法上是隱藏的,但在技術上卻被使用了。感謝您解釋它。 – joy

+1

感謝您的深入瞭解 – Matteo

1

ReactDOM取決於反應。 From NPM Package Manager,你可以看到你需要在夫妻使用:

NPM安裝反應反應-DOM

和描述談:

其目的是配對與同構反應,這將是 作爲對npm的反應。

希望這澄清

相關問題