简介
jsx
是用在React
中的一种虚拟dom
的一种方式。React
有一个核心机制就是虚拟dom
,就是对虚拟dom
的操作,减少了对实际dom
的操作,大大提高了性能。jsx
就是javascript
和xml
结合的一种格式,React
发明了jsx
,利用html
语法来创建虚拟dom
。当遇到<
的时候,jsx
就当做html
来解析。当遇到{
的时候,就当javascript
解析。
例如:1
2
3
4
5
6const List = (
<ul className="list">
<li>first</li>
<li>second</li>
</ul>
)
如上面的代码需要注意一点,由于class
是javascript
中的关键字,所以需要用className
来代替,而for
用htmlFor
代替。其实jsx
在执行的过程中是经过翻译器翻译的,翻译成了原生的javascript
代码来执行。
基本语法
jsx
中的大括号中放的是javascript
代码,所以也可以放表达式,例如:
1 | {a?1:0} |
而且在
jsx
中,可以循环一个数组来返回列表数据。jsx
中绑定事件,可以直接绑定到元素上。
1 | <button onClick={this.submit.bind(this)}>submit</button> |
在这里需要注意两点:
onClick
的c
必须大写,因为这里是当做javascript
来解析的,大小写要区分。this
的指向需要手动绑定。
- 使用内联样式的时候,传入的属性值不能是字符串了,必须是对象。
1 | <div style={{color:"#fff"}}>jsx</div> |
这里需要主意的就是,并不是双大括号,而是在传入属性的时候里面的大括号是表示的是对象。
- 在组件内部添加
html
代码的时候,并将html
代码渲染到页面上,React
会默认转义,如果不想转义可以这样写:
1 | var wy = '<h1>wy</h1>' |
#小结
在刚接触jsx
的时候,看着这种混合在一起的写法会很不适应,不过写的多了,看的多了慢慢也就习惯了。特别和vue不同,在vue中双引号之中也可能是javascript
代码,而jsx
中是大括号,这点要区分开。