🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 1.jsx的特点 > JSX 执行更快,因为它在编译为 JavaScript 代码后进行了优化。 > 它是类型安全的,在编译过程中就能发现错误。 > 使用 JSX 编写模板更加简单快速。 ``` `const element = <h1>Hello, world!</h1>;` ``` 这种看起来可能有些奇怪的标签语法既不是字符串也不是 HTML。 它被称为 JSX, 一种 JavaScript 的语法扩展。 我们推荐在 React 中使用 JSX 来描述用户界面。 包括像在jsx中嵌套很多元素也是允许的,如下 ``` const element = ( <div> <h1>Hello!</h1> <h2>Good to see you here.</h2> </div> ); ``` Babel 会把 JSX 转译成一个名为 React.createElement() 函数调用。 以下两种示例代码完全等效: ``` const element = ( <h1 className="greeting"> Hello, world! </h1> ); const element = React.createElement( 'h1', {className: 'greeting'}, 'Hello, world!' ); ``` React.createElement() 会预先执行一些检查,以帮助你编写无错代码,但实际上它创建了一个这样的对象: ``` // 注意:这是简化过的结构 const element = { type: 'h1', props: { className: 'greeting', children: 'Hello, world!' } }; ``` 说白了,jsx其实就是允许用户在js中能够像编写普通html那样,而不需要去拼接一大堆字符串 那既然我们在js中可以正常编写html,那么如果有变量的话怎么办,我们可以在 JSX 中使用 JavaScript 表达式。表达式写在花括号 {} 中。实例如下 ``` ReactDOM.render( <div> <h1>{1+1}</h1> </div> , document.getElementById('example') ); ``` 也就是大括号提供了一个js执行环境,可以写任意的js表达式,但是不能写语句 元素的属性等如果要用变量表示也是通过话括号表示如下 ``` var myStyle = { fontSize: 100, color: '#FF0000' }; ReactDOM.render( <h1 style = {myStyle}>react</h1>, document.getElementById('example') ); ``` 特殊的,class在jsx中要写为className,因为class在js中会识别为类 易错点:样式接受一个样式对象,但是前提是需要花括号提供js环境 ``` //错误 ReactDOM.render( <h1 style = {fontSize:12}>react</h1>, document.getElementById('example') ); ``` ``` //正确: ReactDOM.render( <h1 style = {{fontSize:12}}>react</h1>, document.getElementById('example') ); ``` 样式中不能使用横线连接,要使用驼峰式命名,数字的单位可以省略, React 会在指定元素数字后自动添加 px 特殊的,jsx中可以直接插入数组, ``` var arr = [ <h1>react</h1>, <h2>学习react</h2>, ]; ReactDOM.render( <div>{arr}</div>, document.getElementById('example') ); ``` 关于注释,标签之中的注释要写在花括号中,标签之外的注释正常编写就可以,如下 ``` ReactDOM.render( /*注释 */ <h1>张三 {/*注释*/}</h1>, document.getElementById('example') ); ```