简单聊聊JSX

什么是JSX?

JSX 是 JavaScript XML 的缩写,是 React 中用来描述用户界面的语法(其实可以看作是JavaScript的扩展语法)。可以把它看作是一种将 HTML 与 JavaScript 结合在一起的方式,使得在 JavaScript 中写 HTML 变得简单和直观。

为什么要用JSX?

在使用 React 时,JSX 是很方便的。我们可以用类似 HTML 的语法来写 React 组件,这样的好处是:

  • 可读性强:代码看起来更像传统的 HTML,容易理解。
  • 写起来简单:可以直接在 JavaScript 代码中写 HTML,不需要字符串拼接或模板引擎。

JSX 的基本语法

1. 元素渲染

在 JSX 中,我们可以直接使用 HTML 标签:

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

这个 element 就是一个 JSX 元素,表示一个 <h1> 标签,其内容是 “Hello, world!”。

2. 嵌套元素

JSX 允许嵌套元素,就像在 HTML 中一样:

const element = (<div><h1>Hello, world!</h1><p>This is a paragraph.</p></div>
);

这里,我们使用了一个 <div> 标签,里面嵌套了一个 <h1> 标签和一个 <p> 标签。

3. JavaScript 表达式

在 JSX 中,我们可以使用大括号 {} 来插入 JavaScript 表达式:

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

这个 element 会渲染为 <h1>Hello, husu!</h1>

JSX 的注意事项

1. 每个 JSX 元素都需要一个根元素

JSX 代码必须包含在一个根元素内。例如,以下代码会报错:

// 错误的 JSX 代码
const element = (<h1>Hello, world!</h1><p>This is a paragraph.</p>
);

我们需要用一个 <div> 或其他元素将它们包起来:

// 正确的 JSX 代码
const element = (<div><h1>Hello, world!</h1><p>This is a paragraph.</p></div>
);
2. 使用类名

在 JSX 中,不能直接使用 class 作为属性,因为 class 是 JavaScript 的保留字。React官方将这个地方做了区分,需要使用 className

const element = <h1 className="greeting">Hello, world!</h1>;
3. 自闭合标签

对于没有子元素的标签,需要使用自闭合标签的语法:

const element = <img src="logo.png" alt="Logo" />;

注意,这里的 <img /> 标签末尾有一个斜杠。

JSX 是如何工作的?

JSX 不是浏览器可以直接理解的。当浏览器看到JSX时候,内心是这样的:"这是哪个哦?认不到的嘛,有没有哪个帮我翻译一下哟?"这个时候,有一个大兄弟,它叫Babel,他就举手:“哎,浏览器大哥,这个我认得到,我给你翻译一哈。” Babel大兄弟(编译工具)就将JSX转换成普通的 JavaScript 代码。如下面的 JSX 代码:

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

会被编译成:

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

这个 React.createElement 函数会返回一个描述页面上元素的对象,这个对象就是我们所说的 “React 元素”。

使用 JSX 构建 React 组件

JSX 通常用于构建 React 组件。以下是一个简单的例子:

function Welcome(props) {return <h1>Hello, {props.name}</h1>;
}const element = <Welcome name="husu" />;

在这个例子中,我们定义了一个 Welcome 组件,它使用了一个 props 参数,并返回一个包含 props.name<h1> 标签。然后,我们使用 JSX 来渲染这个组件。

总结

JSX 是 React 中一种非常强大的工具,我们可以在 JavaScript 中编写类似 HTML 的代码,从而使得构建界面变得更加简单和直观。记住以下几点:

  • JSX 让你可以直接在 JavaScript 中编写 HTML。
  • 使用大括号 {} 可以在 JSX 中插入 JavaScript 表达式。
  • 每个 JSX 代码块必须有一个根元素。
  • 使用 className 而不是 class 来定义类。
  • JSX 需要通过编译工具转换为普通的 JavaScript。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/34856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优化流程市政道路乙级资质内部管理优化

1. 建立资质管理专项小组 组建由高层领导挂帅&#xff0c;包含资质管理、人力资源、财务、技术等部门代表的专项小组&#xff0c;负责资质的日常维护、升级规划及申报工作。 2. 信息化管理系统 引入或升级资质管理信息系统&#xff0c;自动化追踪人员资质状态、继续教育记录…

sqlserver backup and restore

在 SQL Server 中&#xff0c;备份&#xff08;Backup&#xff09;和还原&#xff08;Restore&#xff09;是非常重要的数据库维护操作&#xff0c;用于确保数据的安全性和完整性。以下是关于 SQL Server 备份和还原的简要概述以及一些基本的 SQL 语句示例 参考官方地址 https…

定时邮件教程

下面是一个在Linux下使用crontab定时发送邮件的教程。假设你已经有一个Python邮件脚本&#xff0c;接下来我们会通过crontab定时执行这个脚本。 1. 编写Python邮件脚本 假设你的Python邮件脚本名为send_email.py&#xff0c;并且它位于/home/scripts/目录下。 mkdir -p /hom…

【数学建模】—【Python库】—【Numpy】—【学习】

目录 ​编辑 1. NumPy安装 2. ndarray对象 1. 创建ndarray 1.从列表或元组创建&#xff1a; 2.使用内置函数创建&#xff1a; 2. ndarray属性 3. 数组运算 1. 基本运算 2. 数学函数 3.统计函数 4. 数组索引与切片 1. 一维数组索引与切片 2.多维数组索引与切片 5.…

5.javaSE基础__集合(List+Set+Map实现类)

\1. 抽象类和接口的区别 抽象类的需要abstract修饰,内部方法可以是抽象的也可以是不抽象的接口: 可以看成抽象类,但不是类,方法没有方法体(1.8之前),由实现类实现具体方法功能 \1. 什么是异常 程序运行时出现的错误 \1. 异常的分类 ErrorException RunTimeException: 除0,空指针…

如何在 CentOS 上卸载 Nginx?

本章教程,主要介绍如何彻底卸载删除nginx 一、停止nginx服务 sudo systemctl stop nginx二、卸载nginx服务 sudo yum remove nginx三、查找nginx相关文件 sudo find / -name *nginx*将nginx相关文件进行删除 四、删除nginx相关文件 这里是常见的一些nginx相关文件 s

机器学习/pytorch笔记:time2vec

1 概念部分 对于给定的标量时间概念 t&#xff0c;Time2Vec 的表示 t2v(t)是一个大小为 k1的向量&#xff0c;定义如下&#xff1a; 其中&#xff0c;t2v(t)[i]是 t2v(t)的第 i 个元素&#xff0c;F是一个周期性激活函数&#xff0c;ω和 ϕ是可学习的参数。 以下是个人理解&am…

【MySQL数据库之索引相关】

1、什么是索引&#xff1f; 索引&#xff08;Index&#xff09;是一种用于提高查询效率的数据结构。 索引通过为数据库表中的一列或多列创建一个引用&#xff0c;从而加快数据的检索速度。&#xff08;对列创建索引&#xff09; 索引类似于书的目录&#xff0c;可以帮助数据库…

Shark!一个基于遗传算法的自动因子挖掘平台

DolphinDB 推出的 CPU-GPU 异构计算平台 Shark&#xff0c;将 DolphinDB 上的复杂指标计算能力无缝切换到 GPU 算力平台&#xff0c;大幅提升了计算性能。Shark 最新版本给开发者提供了两个主要功能&#xff1a;因子挖掘和因子计算。通过使用遗传算法&#xff0c;因子挖掘功能能…

编程哲学——抽象

主要参考资料: App Image Format: https://docs.espressif.com/projects/esp-idf/zh_CN/release-v4.4/esp32s3/api-reference/system/app_image_format.html# 目录 简介抽象&#xff1a;从现实到模型类和对象&#xff1a;现实与模型的映射封装&#xff1a;隐藏复杂性继承&#…

年薪超过30万的网工,需要具备什么技能?

网工是一个各行各业都需要的职业&#xff0c;工作内容属性决定了它不会只在某一方面专精&#xff0c;需要掌握网络维护、设计、部署、运维、网络安全等技能。 那么&#xff0c;网络工程师的技术水平体现在哪些方面&#xff1f;今天就跟你唠唠这个。 01 先来测测你的网络设计能力…

Flutter 像素编辑器#05 | 缩放与平移

theme: cyanosis 本系列&#xff0c;将通过 Flutter 实现一个全平台的像素编辑器应用。源码见开源项目 【pix_editor】。在前三篇中&#xff0c;我们已经完成了一个简易的图像编辑器&#xff0c;并且简单引入了图层的概念&#xff0c;支持切换图层显示不同的像素画面。 《Flutt…

Docker - Oracle Database 23ai Free

博文目录 文章目录 说明命令NavicatSYSTEMPDBADMIN 扩展公共用户本地用户 说明 Oracle 官方镜像仓库 Database 23ai Free | Oracle Docker 官方没有提供 Oracle Database 相关镜像, 但是 Oracle 官方镜像仓库有提供, 打开上面的链接, 选择 Database, 选择合适的版本, 如 enter…

Modern C++字面量一网打尽

C Literals 数值 二进制、八进制、十六进制字面量 二进制&#xff1a;0b 或 0B开头。八进制&#xff1a;0开头。十六进制&#xff1a;0x 或 0X开头。 // for different base constexpr int base2 0b1111; // 二进制 15 constexpr int base8 017; // 8进制 15 conste…

Elasticsearch:使用 Llamaindex 的 RAG 与 Elastic 和 Llama3

这篇文章是对之前的文章 “使用 Llama 3 开源和 Elastic 构建 RAG” 的一个补充。我们可以在本地部署 Elasticsearch&#xff0c;并进行展示。我们将一步一步地来进行配置并展示。你还可以参考我之前的另外一篇文章 “Elasticsearch&#xff1a;使用在本地计算机上运行的 LLM 以…

Android frida 实战: 分析全民K歌的判断逻辑

本篇进入 Android frida 实战&#xff0c;旨在分析学习全民K歌这个 app 演唱页面的判断逻辑。 版本&#xff1a;8.22.38.278 此 app 为腾讯推出的面向国内的社交娱乐类应用软件&#xff0c;主要功能是提供用户唱歌、录制和分享自己演唱的歌曲。当非 vip 用户演唱某 vip 歌曲等功…

三元前驱体废水回收镍钴工艺:环保与经济效益的双重胜利

在全球新能源产业迅猛发展的背景下&#xff0c;锂离子电池作为绿色能源的核心组件&#xff0c;其需求量激增&#xff0c;带动了上游材料市场&#xff0c;尤其是三元前驱体材料的蓬勃发展。然而&#xff0c;伴随着行业的快速扩张&#xff0c;三元前驱体生产过程中产生的含镍钴废…

Qt开发 | Qmake与CMake | Qt窗口基类 | VS Qt项目与QtCreator项目相互转化 | Qt架构 | Qt学习方法

文章目录 一、Qmake与CMake介绍1.Qmake2.CMake3.使用qmake还是cmake&#xff1f; 二、Qt3个窗口基类的区别三、vs qt与QtCreator项目相互转化方法1.QtCreator项目转VS Qt2.VS Qt项目转QtCreator项目 四、Qt架构介绍与学习方法详解 一、Qmake与CMake介绍 Qmake和CMake都是构建系…

干货分享 | TSMaster 中不同总线报文消息过滤的操作方式

TSMaster软件平台支持对不同总线&#xff08;CAN、LIN、FlexRay&#xff09;报文和信号的过滤&#xff0c;包括全局接收过滤、数据流过滤、窗口过滤、字符串过滤、可编程过滤&#xff0c;针对不同的总线信号过滤器的使用方法基本相同。今天重点和大家分享一下关于TSMaster中报文…

全国首场以AI数字内容风控为主题的大会正式官宣,首批演讲嘉宾和议题揭晓!

曾经我们感叹的“AI迎来了iPhone时刻”&#xff0c;如今已变成“iPhone迎来了AI时刻”。前段时间&#xff0c;苹果全球开发者大会的召开&#xff0c;以及闻声而起的资本市场&#xff0c;无一不再次佐证了AI的无穷想象。 从OpenAI直播演示GPT-4o和谷歌的I/O开发者大会2024&…