React零基础入门02--JSX语法基础

简介: React零基础入门02--JSX语法基础

JSX语法简介
JSX是js的一个高级语法,在运行时通过Babel转换为低版本的代码,使用JSX语法的主要目的是为了编程的逻辑更清晰和快速,提升代码可读性和性能。

下图解释了JSX编译的过程

基本使用
新建一个01-HwlloWorld.html文件,内容如下,我们使用JSX语法在页面输出一句“Hello World”

<!DOCTYPE html>






















1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
获取元素,在body中添加一个id为app的div,使用原生js获取它,这个div是React渲染DOM的容器
//获取元素
const con=document.getElementById("app");

1
2
3
使用JSX语法创建虚拟DOM,
JSX语法的写法又像js又像html,它是是一个 JavaScript 的语法扩展,能帮我们很容易的操作DOM
// 创建虚拟DOM
const Vh1=

你好世界

1
2
3
使用ReactDOM.render()方法,将创建的虚拟DOM渲染到app中
ReactDOM.render()方法接收两个参数:要渲染的虚拟DOM和虚拟DOM渲染到哪个容器,我们将刚刚创建的Vh1渲染到app中
// 渲染
ReactDOM.render(Vh1,con);
1
2
用浏览器运行html文件,即可看到效果

多重嵌套
JSX语法规定:多重嵌套需要一个外部容器将嵌套元素包裹

开发时,我们很少只在页面输出一句话。大多时多个元素的嵌套,下面演示一下如何使用JSX渲染嵌套元素
我们想在页面输出一段文章和一个标题

<!DOCTYPE html>





















1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
解释一下上面的代码,h2是标题 p标签是段落,但是为什么外面加了
呢?

这是因为JSX的语法规定:在 ReactDOM.render()函数内插入的必须是一个整体

所以必须用一个外部容器将h2和p标签包裹起来

而className="box" 是给外面的容器div加了一个class名为box,便于我们去设置css样式。

当然你也可以用一个变量将虚拟DOM保存再插入ReactDOM.render()函数渲染也是一样的,这样代码看起来更简洁

你也可以继续添加其他元素,在这里就不再添加了,原理都是一样的。


1
2
3
4
5
6
7
8
9
打开浏览器运行一下,效果如下
运行效果图:


JSX语法中使用变量和表达式
JSX语法规定:在JSX中使用表达式时:变量和表达式都要写在{ }中

<!DOCTYPE html>






















1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
上面的代码中,书名bookName是一个变量,将其作为pb标签的文本内容,使用{}包起来,而下面的数的价格 {1003+2-60/6}则是一个计算表达式,也用{}括起来
注意:{}内只能放变量和表达式,不能放语句,如 if(...){..} for(...){...} 都是语句,不能放在JSX里面的{}里

使用浏览器运行结果如下


JSX中使用行内样式
JSX语法规定:JSX中通过对象的方式引入行内样式

接着说上面的案例,我们想给书名和价格加个css样式的话,就需要以对象字面量的方式加入
为了效果更好,我又添加了一个img标签作为书的封面
所有代码如下


<!DOCTYPE html>






















1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
解释一下上面的代码
nameStyle和priceStyle是书的标题和价格的样式,安照JSX的语法,必须是对象形式,且使用驼峰命名法

const nameStyle={
   backgroundColor:"#a7493f",
    color:"#1b1b1b",
    padding:"10px",
    margin:"15px",
    borderRadius:"2px",
    fontSize:"20px",
    color:"#fff"
};

const priceStyle={
    display:"block",
    color:"#e4393c",
    fontSize: "16px",
    padding:"10px",
};

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
在JSX语法中,设置行内样式通过style属性,其值是一个对象

{bookName}

中的nameStyle就是我们刚刚定义的对象样式变量,同样遵循JSX的语法规则,变量用{}括起

下面的

{bookName}

原理是一样的

ReactDOM.render(


{bookName}



春节特价只需要:{100*3+2-60/6} 元
,document.getElementById("app"))

1
2
3
4
5
6
7
这里需要注意的是,JSX语法中,单标签必须闭合
是不对的,应该加上/,写成 其他单标签也是如此写法

上面的代码运行结果如下:

JSX数组遍历
数组遍历应该是开发中最常用的,JSX中数组遍历使用ES6的新数组方法map()

先说一下map()方法

map可以简单的理解为映射,将原数组按照一定的规则映射到新的数组

map接收一个函数作为参数,该函数的有三个参数value,index,arr;依次为依次为当前的值、当前值的下标和原数组,其中index和arr是可选参数

原数组的每一项会依次执行该函数

如下面将a1数组双倍存入b1

let a1=[1,2,3];
let b1=[];
b1=a1.map((item)=>{
return item*2
});
console.log(b1);
2
4
6
1
2
3
4
5
6
7
8
9
上面的代码,map里面的参数函数,遍历原数组的每一项,将该项乘2后返回出去,返回的项组成一个新的数组。

当然也可以不对数组的值处理,直接输出也可以,比如接下来的遍历

我们定义一个数组,里面存放了几组对象,用来遍历生成一个ul标签

<!DOCTYPE html>

























1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
上面的代码中,在ul中通过map()方法遍历输出theArr的每一项,即value,创建li标签,另外li标签的 key属性是当前数组元素的下标,用来表示在内存中的唯一性

上面的代码运行结果如下

到这里,JSX的基础语法先告一段路,下面总结一下:

JSX中添加属性时,使用className代替class,像label中的for属性,使用htmlFor代替
JSX创建DOM的时候,所有的子节点必须有唯一的根元素进行包裹
JSX语法中,标签必须成对出现,如果是单标签,则必须自闭合
JSX中可以直接使用JS代码,直接在JSX中通过{ }中间写JS代码即可
在JSX中只能使用表达式,不能出现语句,变量和语句必须使用{}包裹才能在元素中做插值
在JSX语法中注释为{/注释的内容/}
const VDOm=(
{/我是对标题的注释/}

我是标题


)
相关文章
|
20天前
|
XML 前端开发 JavaScript
react之了解jsx
react之了解jsx
|
3月前
|
前端开发 JavaScript
学习react基础(3)_setState、state、jsx、使用ref的几种形式
本文探讨了React中this.setState和this.state的区别,以及React的核心概念,包括核心库的使用、JSX语法、类与函数组件的区别、事件处理和ref的使用。
74 3
学习react基础(3)_setState、state、jsx、使用ref的几种形式
|
4月前
|
XML JavaScript 前端开发
React Jsx语法入门
【8月更文挑战第13天】React Jsx语法入门
46 4
|
2月前
|
XML 前端开发 JavaScript
React JSX
React 使用 JSX(一种类似 XML 的 JavaScript 语法扩展)来替代传统 JavaScript 编写 UI。JSX 使代码更简洁、执行更快且类型安全。例如,`&lt;h1&gt;Hello, world!&lt;/h1&gt;` 实际上是创建一个 React 元素,通过 `ReactDOM.render()` 渲染到 DOM。注意,JSX 中使用 `className` 替代 HTML 的 `class` 属性。
|
20天前
|
存储 前端开发 JavaScript
react之jsx编译原理
react之jsx编译原理
|
2月前
|
XML 前端开发 JavaScript
React JSX
10月更文挑战第7天
16 2
|
4月前
|
前端开发 JavaScript 开发者
React 的 ES6 语法与 ES5 相比有何不同?
【8月更文挑战第30天】
64 1
|
4月前
|
前端开发 JavaScript
React Server Component 使用问题之添加jsx的组件化能力,如何操作
React Server Component 使用问题之添加jsx的组件化能力,如何操作
|
4月前
|
XML 前端开发 JavaScript
【React新手必看】JSX,让你的代码舞动起来!
【8月更文挑战第24天】JSX(JavaScript XML)是React开发的核心,作为一种JavaScript语法扩展,它支持在代码中使用类似HTML的标签。JSX并非模板语言,在编译过程中转换为纯JavaScript,使React能高效更新DOM并渲染页面。其优势在于直观性、简洁性和灵活性:简化复杂用户界面构建、减少代码量,并支持HTML标签、React组件及JavaScript变量的表达式插入。基本用法涉及定义组件UI,如创建包含标题和段落的简单组件。
89 0
|
22天前
|
前端开发 JavaScript 开发者
颠覆传统:React框架如何引领前端开发的革命性变革
【10月更文挑战第32天】本文以问答形式探讨了React框架的特性和应用。React是一款由Facebook推出的JavaScript库,以其虚拟DOM机制和组件化设计,成为构建高性能单页面应用的理想选择。文章介绍了如何开始一个React项目、组件化思想的体现、性能优化方法、表单处理及路由实现等内容,帮助开发者更好地理解和使用React。
59 9