【react从入门到精通】React JSX详解

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
可观测监控 Prometheus 版,每月50GB免费额度
简介: React JSX是一种在React中使用的JavaScript扩展语法,它允许我们使用类似HTML的语法来创建React元素和组件。使用JSX可以更方便地编写React应用程序,并使代码更易于阅读和理解。

前言

image.png

在上一篇文章《React生命周期》中我们了解了React的生命周期,深入分析了React每个生命周期的意义。了解了利用生命周期中的函数能够帮助我们实现什么样的功能以及为什么要这么做。有了以上的只是基础我们对React的理解又更近一步。更够写出更加健壮完善的代码。

本文中我们将详细了解React中的JSX,以及需要注意的一些语法规则。

React技能树

React 技能树
├── JSX
│   ├── 语法
│   ├── 元素渲染
│   ├── 组件
│   ├── Props
│   ├── State
│   └── 生命周期
├── 组件通信
│   ├── 父子组件通信
│   ├── 兄弟组件通信
│   ├── 跨级组件通信
│   ├── Context
│   └── Redux
├── 样式
│   ├── 内联样式
│   ├── CSS Modules
│   └── Styled Components
├── 路由
│   ├── React Router
│   ├── 动态路由
│   └── 嵌套路由
├── 数据请求
│   ├── Axios
│   ├── Fetch
│   └── GraphQL
├── 状态管理
│   ├── Redux
│   ├── MobX
│   └── Recoil
├── 常用库和框架
│   ├── Ant Design
│   ├── Material UI
│   ├── Bootstrap
│   ├── Semantic UI
│   └── Tailwind CSS
├── 测试
│   ├── Jest
│   ├── Enzyme
│   └── React Testing Library
├── 构建工具
│   ├── Webpack
│   └── Parcel
└── 服务端渲染
    ├── Next.js
    └── Gatsby

什么是JSX

JSX是一种语法扩展,它将HTML和JavaScript代码结合起来,使得我们能够在JavaScript代码中编写类似HTML的标记。在React中,我们可以使用JSX来描述组件的结构和样式,它提供了一种简洁、清晰的方式来表达我们的意图。

在React中,JSX被编译为普通的JavaScript函数调用,所以我们可以在JavaScript中使用它。具体来说,JSX被编译为React.createElement函数的调用,该函数接受三个参数:要创建的元素类型、元素的属性和子元素。

下面是一个简单的JSX示例:

const element = <h1>Hello, world!</h1>;

在这个例子中,我们定义了一个名为element的变量,它的值是一个JSX元素,代表一个h1标签,包含文本"Hello, world!"。下面是相应的JavaScript代码:

const element = React.createElement(
  'h1',
  null,
  'Hello, world!'
);

在这个例子中,我们使用React.createElement函数创建了一个名为element的变量,它的值与JSX示例的值相同。第一个参数是元素类型,这里是'h1'字符串;第二个参数是元素的属性,这里是null;第三个参数是子元素,这里是字符串'Hello, world!'。

JSX的基本语法规则

1.JSX必须有一个顶层元素

在JSX中,我们必须将所有的标签包裹在一个顶层元素中。如果有多个顶层元素,我们需要使用一个容器元素将它们包裹起来。例如:

const element = (
  <div>
    <h1>Hello, world!</h1>
    <p>Welcome to my website.</p>
  </div>
);

在这个例子中,我们将h1和p标签包裹在一个div标签中,以便它们成为顶层元素。

2.JSX标签必须有一个结束标记,或者是自闭合的

在JSX中,所有的标签都必须有一个结束标记,或者是自闭合的。例如:

// 有结束标记的标签
<h1>Hello, world!</h1>

// 自闭合的标签
<img src="image.jpg" alt="example" />

3.JSX中可以使用JavaScript表达式

在JSX中,我们可以在标记中使用JavaScript表达式,用花括号{}包裹。例如:

const name = 'React';
const element = <h1>Hello, {
   
   name}!</h1>;

在这个例子中,我们定义了一个名为name的变量,它的值是字符串'React'。我们在h1标签中使用了一个JavaScript表达式{name},它将被替换为变量name的值。

4.JSX中的样式和HTML中的样式有所不同

在HTML中,我们可以直接在元素上使用style属性,并在属性值中使用CSS语法来描述样式,例如:

<div style="color: red; font-size: 24px;">Hello, world!</div>

而在JSX中,我们也可以使用style属性来指定元素的样式,但是属性值必须使用JavaScript对象来表示。例如:

const style = {
   
   
  color: 'red',
  fontSize: '24px',
};
const element = <div style={
   
   style}>Hello, world!</div>;

可以看到,我们首先定义了一个名为style的JavaScript对象,它包含了color和fontSize两个属性,并分别指定了它们的值为'red'和'24px'。然后,我们在JSX中使用style属性,并将style对象作为属性值传递给div元素。

需要注意的是,JSX中的style属性与HTML中的style属性语法有所不同,我们必须使用JavaScript对象来表示样式,并使用驼峰式命名法来表示CSS属性名。例如,CSS中的属性background-color在JavaScript对象中表示为backgroundColor。

5.JSX中的class属性必须写成className

在JSX中,我们使用className属性来指定元素的class,而不是使用HTML中的class属性。例如:

const element = <div className="container">Hello, world!</div>;

在这个例子中,我们使用了className属性来指定div元素的class为'container'。

6.JSX中的style属性必须使用对象来表示

在JSX中,我们使用style属性来指定元素的样式,而不是使用HTML中的style属性。但是,与HTML中不同的是,在JSX中,我们需要使用一个JavaScript对象来表示样式。例如:

const style = {
   
   
  color: 'red',
  fontSize: '24px',
};
const element = <div style={
   
   style}>Hello, world!</div>;

在这个例子中,我们定义了一个名为style的变量,它的值是一个包含color和fontSize属性的对象。我们使用style属性来指定div元素的样式为这个对象。

JSX中的注释与HTML中的注释有所不同。
在JSX中,我们使用花括号和注释符号/ /来表示注释,而不是使用HTML中的。例如:

const element = (
  <div>
    {
   
   /* 这是一个注释 */}
    <h1>Hello, world!</h1>
  </div>
);

在这个例子中,我们在JSX中使用注释符号/ /来表示注释,它们将被编译为JavaScript中的注释。

总结

在React中,JSX提供了一种简洁、清晰的方式来描述组件的结构和样式。它结合了HTML和JavaScript代码,使得我们能够在JavaScript代码中编写类似HTML的标记。

在使用JSX时,需要注意一些语法规则,例如必须有一个顶层元素、标签必须有结束标记或自闭合、样式必须使用对象来表示等。掌握JSX的使用方法对于开发React应用非常重要。


✍创作不易,求关注😄,点赞👍,收藏⭐️

相关文章
|
3月前
|
前端开发 JavaScript
学习react基础(3)_setState、state、jsx、使用ref的几种形式
本文探讨了React中this.setState和this.state的区别,以及React的核心概念,包括核心库的使用、JSX语法、类与函数组件的区别、事件处理和ref的使用。
91 3
学习react基础(3)_setState、state、jsx、使用ref的几种形式
|
1月前
|
JavaScript 前端开发 容器
React零基础入门02--JSX语法基础
React零基础入门02--JSX语法基础
React零基础入门02--JSX语法基础
|
1月前
|
前端开发 JavaScript 定位技术
React 地图组件 Mapbox 入门指南
Mapbox 是一个强大的地图平台,提供丰富的地图数据和工具,支持多种开发语言和框架。本文介绍如何在 React 项目中使用 Mapbox,涵盖基础概念、安装配置、基本用法、常见问题及解决方法、高级用法等内容,并通过代码示例详细说明,帮助开发者提升地图应用的开发效率和用户体验。
98 2
|
1月前
|
前端开发 API UED
React 图片轮播 Carousel:从入门到进阶
本文介绍了在 React 中实现图片轮播(Carousel)的方法,从基础安装和配置 `react-slick` 开始,逐步讲解了常见问题如图片路径、性能优化、自定义样式和交互处理,以及高级话题如动态数据加载和响应式设计。通过详细示例,帮助开发者避免易错点,提升轮播图的用户体验。
39 3
|
1月前
|
XML 前端开发 JavaScript
react之了解jsx
react之了解jsx
|
1月前
|
监控 前端开发 JavaScript
React 静态网站生成工具 Next.js 入门指南
【10月更文挑战第20天】Next.js 是一个基于 React 的服务器端渲染框架,由 Vercel 开发。本文从基础概念出发,逐步探讨 Next.js 的常见问题、易错点及解决方法,并通过具体代码示例进行说明,帮助开发者快速构建高性能的 Web 应用。
93 10
|
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` 属性。
|
1月前
|
存储 前端开发 JavaScript
react之jsx编译原理
react之jsx编译原理
|
2月前
|
前端开发 JavaScript 开发者
探索现代Web前端技术:React框架入门
【10月更文挑战第9天】 探索现代Web前端技术:React框架入门
|
2月前
|
XML 前端开发 JavaScript
React JSX
10月更文挑战第7天
18 2