React - jsx 语法

devtools/2025/2/7 15:16:01/

在 React 中,JSX(JavaScript XML)是一种语法扩展,它允许开发者在 JavaScript 代码中使用类似 HTML 的语法。JSX 提升了代码的可读性和可维护性,使得编写和构建用户界面更加直观。它被广泛应用于 React 组件的定义。

一、JSX 的基本语法

(一)基本元素

JSX 语法允许在 JavaScript 代码中直接使用 HTML 标签,例如:

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

这里的 element 是一个 JSX 元素,表示一个包含文本的 h1 标签

(二)嵌套标签

javascript">// 嵌套标签 利用 小括号() 
const element = (<div><h1>Hello, world!</h1><p>JSX 语法:嵌套标签使用小括号 () </p></div>
);

二、语法规则

(一)单一根标签

每个 JSX 表达式必须只有一个根元素;如果有多个元素,它们必须被包裹在一个父元素中。

若不想标签中增加额外的 <div>,可以用 <></> 元素来代替。这个空标签被称作 Fragment

原理:JSX 虽然看起来很像 HTML,但在底层其实被转化为了 JavaScript 对象,不能在一个函数中返回多个对象,除非用一个数组把他们包装起来。这就是为什么多个 JSX 标签必须要用一个父元素或者 Fragment 来包裹。

例如:

javascript">// 正确
const element = (<div><h1>Hello</h1><h2>World</h2></div>
);
// 或者
const element = (<><h1>Hello</h1><h2>World</h2></>
);
// 错误
const element = (<h1>Hello</h1><h2>World</h2>
);
// 且标签必须闭合// 正确
<input type="text">输入内容</input>
// 或者 
<input type="text" />// 错误
<input type="text">

(二)使用大括号

在 JSX 中,可以用 { }  包裹 JavaScript 表达式。

标签中混入 JS 表达式 时要使用 大括号 { }

例如:

javascript">const name = "Tom";
// 字符串 name 的值会被插入到 JSX 中
const element = <h1>Hello, {name}!</h1>; // Hello,Tom!

(三)条件渲染

javascript">const isLoggedIn = true;
// 可以使用 JavaScript 表达式来进行条件渲染
const greeting = isLoggedIn ? <h1>Welcome back!</h1> : <h1>Please sign in.</h1>;
javascript">function MyComponent({ isVisible }) {return (<div>{isVisible ? <p>这是可见的</p> : <p>这是不可见的</p>}</div>);
}

(四)循环渲染

通过数组方法(如:map)渲染列表

javascript">// 通过数组方法(如 map)渲染列表
const numbers = [1, 2, 3, 4];
const listItems = numbers.map((number) =><li key={number.toString()}>{number}</li>
);
javascript">function MyComponent({ items }) {return (<ul>{items.map(item => (<li key={item.id}>{item.text}</li>))}</ul>);
}

(五)JSX 与组件

 父组件可以包含子组件

标签字母首写:

  • 小写字母开头,则将该标签转为 html 中同名元素,若 html 中无该标签对应的同名元素,则报错;
  • 大写字母开头,react 就去渲染对应的组件,若组件没有定义,则报错。
javascript">function MyComponent() {return <h1>Hello from MyComponent!</h1>;
}
// 父组件可以包含子组件
function App() {return (<div><MyComponent /></div>);
}

(六)内联样式

可以通过 style 属性将行内样式应用于 JSX 元素,需要传入一个对象

javascript">// 内联样式 使用 双括号 {{ }}
const element = <div style={{ color: 'blue', fontSize: '20px' }}>内联样式</div>;

(七)事件处理

事件处理在 JSX 中使用驼峰命名法,使用 on<EventName> 的方式绑定事件,如,onClick事件。

javascript">function handleClick() {alert('8520!');
}const element = <button onClick={handleClick}>点击</button>;

(八)JSX 的编译

javascript">// jsx 语句
const element = <h1>Hello, world!</h1>;// 编译后:(标签,标签属性,标签内容)
const element = React.createElement('h1', null, 'Hello, world!');

三、总结

JSX 是一种强大的语法扩展,使得在 React 中构建用户界面更加简洁和清晰。通过使用 JSX,开发者可以轻松地构建和组织组件,并处理状态、事件和样式等功能。


http://www.ppmy.cn/devtools/156850.html

相关文章

风控系统指标版本管理,前端实现

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang Github&#xff1a;wnhyang - Overview 前言 本文算是前文《基于LiteFlow的风控系统指标版本控制》的完善。 前文已经说明了在基于规则引擎系统中版本管理的重要性&#xff0c;并…

【产品小白】什么是微服务

在数字化浪潮汹涌澎湃的当下&#xff0c;软件系统的规模持续扩张&#xff0c;复杂度呈指数级攀升。如何高效地开发软件&#xff0c;确保其后续的维护轻松便捷&#xff0c;同时具备强大的扩展能力&#xff0c;已然成为广大开发者待攻克的核心难题。微服务作为一种应运而生的前沿…

【贪心算法篇】:“贪心”之旅--算法练习题中的智慧与策略(三)

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;贪心算法篇–CSDN博客 文章目录 前言例题1.最优除法2.跳跃游戏23.跳跃游戏14.加油站5.单调递…

[c语言日寄]赋值操作对内存的影响

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还是…

Mac 基于Ollama 本地部署DeepSeek离线模型

最近节日期间最火的除了《哪吒》就是deepseek了&#xff0c;毕竟又让西方各个层面都瑟瑟发抖的产品。DeepSeek凭借其强大的AI能力真的是在全球多个领域展现出强大的影响力。由于受到外部势力的恶意攻击倒是deepseek官方服务不稳定&#xff0c;国内其他厂家的适配版本也不是很稳…

STM32 串口收发数据包

接线图 HEX数据包接收 文本数据包接收 代码配置 发送HEX数据包 //存储发送或接收的载荷数据 uint8_t TX_Packet[4]; uint8_t RX_Packet[4];void Serial_SendPacket(void) {Serial_SendByte(0xFF);//发送包头Serial_SendArray(TX_Packet, 4);//发送4个载荷数据Serial_SendByte…

【归属地】批量号码归属地查询按城市高速的分流,基于WPF的解决方案

在现代商业活动中&#xff0c;企业为了提高营销效果和资源利用效率&#xff0c;需要针对不同地区的市场特点开展精准营销。通过批量号码归属地查询并按城市分流&#xff0c;可以为企业的营销决策提供有力支持。 短信营销&#xff1a;一家连锁餐饮企业计划开展促销活动&#xf…

rabbitMQ数据隔离

用户管理 点击Admin选项卡&#xff0c;就会呈现rabbitMQ控制台的用户管理界面 Name&#xff1a;sde&#xff0c;也就是用户名Tags&#xff1a;administrator&#xff0c;说明sde用户是超级管理员&#xff0c;拥有所有权限Can access virtual host&#xff1a; /&#xff0c;可…