react之了解jsx

embedded/2024/11/14 0:24:31/

JSX(JavaScript XML)是React中的一种语法扩展,它允许在JavaScript代码中直接编写类似HTML的代码,使得组件的构建和维护变得更加直观和高效。以下是对JSX的详细解析:

一、JSX的基本概念

  1. 定义:JSX是一种JavaScript的语法扩展,它让我们可以在JavaScript中编写类似HTML的代码。这些代码在编译时会被转换为JavaScript对象。

  2. 用途:React主要使用JSX来描述用户界面。虽然React并不强制要求使用JSX,但它是React开发中的核心概念之一。

  3. 特性

    • JSX的语法与HTML非常相似,但存在一些差异。例如,在JSX中,所有的标签必须闭合,自闭合标签需要添加斜杠。
    • JSX中的属性名采用camelCase(小驼峰)命名,而不是HTML中的kebab-case(短横线命名)。例如,class变成了className,for变成了htmlFor。
    • JSX允许在标签内部使用大括号{}来嵌入JavaScript表达式。

二、JSX的使用

1、创建React元素:使用JSX语法可以方便地创建React元素。例如:

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

2、渲染React元素:使用ReactDOM.render()方法可以将React元素渲染到页面中。例如:

javascript">ReactDOM.render(element, document.getElementById('root'));
在React 18及更高版本中,可以使用ReactDOM.createRoot()方法进行渲染:
javascript">ReactDOM.createRoot(document.getElementById('root')).render(element);

3、嵌入JavaScript表达式:在JSX中,可以使用大括号{}来嵌入JavaScript表达式。这些表达式会被计算并插入到HTML中。例如:

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

4、条件渲染:可以使用JavaScript的条件操作符(如if/else、三元运算符、逻辑与运算符)来实现条件渲染。例如:

javascript">const isLoggedIn = true;
const element = isLoggedIn ? <h1>Welcome back!</h1> : <h1>Please sign up.</h1>;

或者:

javascript">const unreadMessages = ['React', 'Re: React', 'Re:Re: React'];
const element = (<div><h1>Hello!</h1>{unreadMessages.length > 0 && <h2>You have {unreadMessages.length} unread messages.</h2>}</div>
);
5、列表渲染:可以使用数组的map()方法来渲染列表。在渲染列表时,应该为每个列表项添加一个唯一的key属性。例如:
javascript">const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((number) => <li key={number.toString()}>{number}</li>);
const element = <ul>{listItems}</ul>;
6、样式处理

行内样式:可以使用style属性来添加行内样式。样式值应该是一个对象,属性名采用camelCase。例如:
javascript">const divStyle = { color: 'blue', backgroundColor: 'lightgray' };
const element = <div style={divStyle}>Styled div</div>;
类名:可以使用className属性来添加类名。这与HTML中的class属性类似,但命名方式需要改为camelCase。例如:
javascript">const element = <div className="my-class">My Div</div>;

三、的注意事项

1、必须包含在单个父元素内:JSX表达式必须有一个父元素包裹。如果要返回多个元素,可以使用<div>或者React提供的<React.Fragment>来包裹。

2、JSX中的注释:在JSX中添加注释需要使用大括号和JavaScript注释语法。例如:

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

3、避免(xss)注入攻击:React会自动对嵌入在JSX中的所有值进行转义,防止注入攻击。这意味着无法通过JSX插入恶意代码。例如:

javascript">const title = response.potentiallyMaliciousInput;
const element = <h1>{title}</h1>;
在上述代码中,即使title包含恶意代码,React也会将其转义为字符串,从而确保应用的安全。

四、JSX​​​​​​​的编译

Babel转译器会把JSX转换成一个名为React.createElement的方法调用。例如:

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

会被转换为:

javascript">const element = React.createElement('h1',{ className: 'greeting' },'Hello, world!'
);

这个方法首先会进行一些避免bug的检查,之后会返回一个对象,这个对象被称为“React元素”。它代表所有显示在屏幕上的东西。React通过读取这些对象来构建DOM并保持数据内容一致。


http://www.ppmy.cn/embedded/137355.html

相关文章

浪涌保护装置在现代配电系统中的应用

安科瑞刘鸿鹏 摘要 随着科技的更新与智能电力设备的普及&#xff0c;现代配电系统面临着越来越复杂的电力环境&#xff0c;其中电力浪涌&#xff08;即瞬间高电压波动&#xff09;成为导致设备损坏和系统故障的一个重要因素。浪涌保护器&#xff08;Surge Protection Device&…

Python+robotframework接口自动化测试实操(超详细总结)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 目前我们需要考虑的是如何实现关键字驱动实现接口自动化输出&#xff0c;通过关键字的封装实现一定意义上的脚本与用例的脱离&#xff01; robot framework 的…

19.(开发工具篇mysql库)mysql锁表问题解决

1&#xff1a;查看锁表情况 show OPEN TABLES where In_use > 0; 2&#xff1a;查看所有进程命令 show processlist 3&#xff1a;杀对应进程&#xff08;通过host&#xff0c;db找对应的ID&#xff09; kill 57303

GobletNet:基于小波的高频融合网络用于电子显微镜图像的语义分割|文献速递-基于深度学习的病灶分割与数据超分辨率

Title 题目 GobletNet: Wavelet-Based High-FrequencyFusion Network for Semantic Segmentation of Electron Microscopy Images GobletNet&#xff1a;基于小波的高频融合网络用于电子显微镜图像的语义分割 01 文献速递介绍 语义分割是计算机视觉中的一项基础任务&#…

论文解读:CARAT P3

论文解读系列文章目录 文章目录 论文解读系列文章目录一、BR&#xff08;Boutell等人&#xff0c;2004年&#xff09;将ML任务分解为多个二分类任务&#xff0c;但忽略了标签之间的关联性。为了利用标签之间的关联性&#xff0c;提出了LP&#xff08;Tsoumakas和Katakis&#x…

脉冲神经网络(Spiking Neural Network,SNN)学习(1)

目录 一、神经网络 1、神经元 2、激活函数 &#xff08;1&#xff09;常见的激活函数&#xff1a;Sigmoid函数 &#xff08;2&#xff09;常见的激活函数&#xff1a;ReLU&#xff08;Rectified Linear Unit&#xff09;函数 &#xff08;3&#xff09;常见的激活函数&…

科技改变生活:最新智能开关、调光器及插座产品亮相

根据QYResearch调研团队的最新力作《欧洲开关、调光器和插座市场报告2023-2029》显示&#xff0c;预计到2029年&#xff0c;欧洲开关、调光器和插座市场的规模将攀升至57.8亿美元&#xff0c;并且在接下来的几年里&#xff0c;将以4.2%的复合年增长率&#xff08;CAGR&#xff…

微擎框架php7.4使用phpexcel导出数据报错修复

在使用微擎社区版时&#xff0c;用phpexcel导出数据&#xff0c;提示错误&#xff0c;经过搜索后得知是php版本问题。 之前一直是用的5.6现在改成了7.4。所以才发现了这个问题。 然后去gitee上看了下微擎官方的代码&#xff0c;好像也没有对这个问题进行修复。 找了下&#…