2016-09-07 63 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')); –