2016-09-07 56 views
0

地方我看到了這樣的代碼: -從其他元素創建React元素在ReactJs中有效嗎?

var App = <div> Hello World </div>; 
ReactDOM.render(<App />, <selector>) 

和它工作正常,但我不明白這裏發生了什麼? 第一線將被轉換爲

var App = React.createElement("div", null, "Hello World"); 

<App />將轉變成

ReactDOM.render(React.createElement(App, null), <selector>); 

這是有效的(它工作正常)?以及這是如何工作? 我認爲,當我們在createElement中傳遞React元素實例時,它會檢測它的類型(找出類或組件)並創建該類型的元素?所以我們在這裏創建2個React元素?

對不起弱engilsh ;-(

回答

0

這有點匿名JSX的功能。它沒有看到在App宣佈爲HTML或JavaScript,而不是它被視爲JSX。無論transipler你使用將轉換這一點。

對於文檔看,第4段下降

https://facebook.github.io/react/docs/glossary.html

您可以將代碼粘貼到通天REPL。它把它放入React.createlement功能。

https://babeljs.io/repl/

編輯錯過了兩個位的距離問題

所以當提到它的transpiling的JavaScript給Ecma 5. JSX被轉化爲React.createlement。該功能有幾個參數。

  • 元素類型(DIV,李,UL等
  • 性質認爲類= 「漂亮」 的風格= 「背景:黑色;」 等(注意當使用JSX類被引用as className
  • children下面的元素。

在您的例子,你有一個字符串的Hello World作爲孩子。這可以很容易地被其他元素所取代。這是jsx的核心。您正在構建一些較小的組件以形成應用程序。

+0

它被轉換成: VAR應用= React.createElement( 「分區」, 空, 的 「Hello World」 ); ReactDOM.render(React.createElement(App,null),null); –

+0

在該Facebook的例子中: - var root =

  • 文本內容
; ReactDOM.render(根,文檔。的getElementById( '例如'));在本例中var root =
  • 文本內容
; ReactDOM.render(,document.getElementById('example')); –