当前位置: 首页 > article >正文

react之了解jsx

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元素。例如:

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

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

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

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

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

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

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

或者:

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属性。例如:
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。例如:
const divStyle = { color: 'blue', backgroundColor: 'lightgray' };
const element = <div style={divStyle}>Styled div</div>;
类名:可以使用className属性来添加类名。这与HTML中的class属性类似,但命名方式需要改为camelCase。例如:
const element = <div className="my-class">My Div</div>;

三、的注意事项

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

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

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

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

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

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

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

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

会被转换为:

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

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


http://www.kler.cn/a/391199.html

相关文章:

  • HTML之表单学习记录
  • [代码随想录Day10打卡] 理论基础 232.用栈实现队列 225. 用队列实现栈 20. 有效的括号 1047. 删除字符串中的所有相邻重复项
  • NoSQL数据库与关系型数据库的主要区别
  • vue2或vue3的name属性有什么作用?
  • RHCE web解析、dns配置、firewalld配置实验
  • LLM - 使用 LLaMA-Factory 微调大模型 Qwen2-VL SFT(LoRA) 图像数据集 教程 (2)
  • 优化时钟网络之时钟抖动
  • 论文笔记:TravelPlanner: A Benchmark for Real-World Planning with Language Agents
  • MySQL技巧之跨服务器数据查询:基础篇-如何获取查询语句中的参数
  • 计算机毕业设计Hadoop+Spark高考推荐系统 高考分数线预测 知识图谱 高考数据分析可视化 高考大数据 大数据毕业设计 Hadoop 深度学习
  • 雨晨 24H2 Windows 11 IoT ltsc 2024 IE 极简版 26100.2222
  • 【分布式】BASE理论
  • 如何监控Kafka消费者的性能指标?
  • cesium 3DTiles之pnts格式详解
  • D. Cool Graph
  • 【Python进阶】Python中的数据库交互:使用SQLite进行本地数据存储
  • YOLOv9改进,YOLOv9引入EffectiveSE注意力机制,二次创新RepNCSPELAN4结构
  • 谈谈编程思想-抽象,状态,面向对象
  • ssm100医学生在线学习交流平台+vue(论文+源码)_kaic
  • Jtti:服务器为什么要做raid?原因是什么?
  • github 以及 huggingface下载模型和数据
  • 监控架构- Grafana-监控大屏
  • 【go从零单排】XML序列化和反序列化
  • 高校大数据人工智能教学沙盘分享
  • Nginx 的 proxy_pass 使用简介
  • DriveLM 论文学习