基本用法
除了通过 React.createElement
方法来创建元素以外,实际上,React
还提供了一种更好的创建方式,这就是JSX
语法。下面我们就来看一下,使用 JSX
如何创建一个元素。
创建一个 h1
元素:
const h1Ele = <h1>Hello</h1>
从代码上可以看到,这里我使用标签的方式定义了一个h1
元素,这种特有的用法在 React
中称之为 jsx
语法,全称叫 JavaScript XML
,它是JavaScript
语法的一种扩展。这种语法允许咱们在js
代码中,可以使用类似于 xml
的方式来定义元素。
这里我们使用React.createElement
方法再定义一个h1
元素,然后对比一下这两个对象。
const h1Ele = <h1>hello</h1>
const _h1Ele = React.createElement("h1", null, "hello")
console.log(h1Ele, _h1Ele)
这两个对象在结构完全保持一致。
实际上我们知道,类似于jsx
这样的语法,在 js
代码中,它并不是合法的代码,也就是说,js
引擎无法正常的执行,那为什么这里控制台没有抛错,而是正常执行了呢?
React
提供的这一套jsx
语法,在js
代码真正被执行之前,实际上还有一个转换的过程,其中有一个转换工具,会将我们代码中使用jsx
创建的元素,通通转化成使用 createElement
方法来创建,然后再把转换完成之后的代码交给浏览器执行,这一个工具就是babel
,打开 babel 网站,我们来看一下:
babel
提供了一个在线的转换方式,在这一个页面中,我们可以在左侧输入jsx
代码,在右侧就可以实时看到转换完成之后的结果。比如,这里我通过jsx
创建h1
元素,完成之后在右侧就可以看到与之对应的javascript
代码了。
回到我们的开发环境中,我们不用过多的关心如何来配置babel
让其完成jsx
的转换,因为我们在构建整个项目时,脚手架工具已经帮助我们完成了这一块的部署,我们直接使用jsx
就可以了。
表达式
表达式的目的是为了让我们能够在jsx
语法中执行javascript
代码,你可以把它看成是一种xml
和javascript
的结合方式。它的使用方式很简单,我们只需要通过一对花括号{}
就可以用来标志表达式了,比如,我要将某个变量的值在h1
元素中显示出来,就可以这样来操作:
const title = "Hello"
const h1Ele = <h1>{title}</h1>
ReactDOM.render(h1Ele, document.querySelector("#root"))
当babel
解析jsx
语法时,会把花括号里面的语句当成js
的表达式来执行。
再比如,我现在要让这个h1
元素的字体变成红色,我就可以设置它的style
属性:
const h1Ele = <h1 style={{
color: "red"
}}>{title}</h1>
这里外层的花括号是表达式,里面我们传递的是一个javascript
对象。
在表达式中,我们还可以进行三目运算:
const h1Ele = <h1 style={{
color: "red"
}}>{false ? "Hello" : "Hi"}</h1>
这里三目运算的返回值,就是表达式的值。
除了以上的用法以外,我们还可以在表达式中调用函数,比如,我要动态渲染一个ul
列表就可以这样操作:
const arr = ["HTML", "CSS", "JAVASCRIPT"]
const ulEle = (
<ul>
{
arr.map((item, index) => {
return <li key={index}>{item}</li>
})
}
</ul>
)
ReactDOM.render(ulEle, document.querySelector("#root"))
这里,我们就在表达式中调用了数组的map
方法,并将这个方法的返回值当成ul
的子元素。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。