--- id: jsx-in-depth-zh-CN title: 深入 JSX permalink: jsx-in-depth-zh-CN.html prev: displaying-data-zh-CN.html next: jsx-spread-zh-CN.html --- [JSX](http://facebook.github.io/jsx/) 是一个看起来很像 XML 的 JavaScript 语法扩展。React 可以用来做简单的 JSX 句法转换。 ## 为什么要用 JSX? 你不需要为了 React 使用 JSX,可以直接使用原生 JS。但是,我们建议使用 JSX 是因为它能精确,也是常用的定义包含属性的树状结构的语法。 它对于非专职开发者比如设计师也比较熟悉。 XML 有固定的标签开启和闭合的优点。这能让复杂的树更易于阅读,优于方法调用和对象字面量的形式。 它没有修改 JavaScript 语义。 ## HTML 标签对比 React 组件 React 可以渲染 HTML 标签 (strings) 或 React 组件 (classes)。 要渲染 HTML 标签,只需在 JSX 里使用小写字母开头的标签名。 ```javascript var myDivElement =
; React.render(myDivElement, document.getElementById('example')); ``` 要渲染 React 组件,只需创建一个大写字母开头的本地变量。 ```javascript var MyComponent = React.createClass({/*...*/}); var myElement = ; React.render(myElement, document.getElementById('example')); ``` React 的 JSX 里约定分别使用首字母大、小写来区分本地组件的类和 HTML 标签。 > 注意: > > 由于 JSX 就是 JavaScript,一些标识符像 `class` 和 `for` 不建议作为 XML > 属性名。作为替代,React DOM 使用 `className` 和 `htmlFor` 来做对应的属性。 ## 转换(Transform) JSX 把类 XML 的语法转成原生 JavaScript,XML 元素、属性和子节点被转换成 `React.createElement` 的参数。 ```javascript var Nav; // 输入 (JSX): var app =