react的JSX语法

news2024/12/26 22:36:04

1.jsx基本使用

1 createElement() 的问题

  1. 繁琐不简洁。
  2. 不直观,无法一眼看出所描述的结构。
  3. 不优雅,用户体验不爽。

在这里插入图片描述

2 JSX 简介

JSX 是 JavaScript XML 的简写,表示在 JavaScript 代码中写 XML(HTML) 格式的代码。
优势:声明式语法更加直观、与HTML结构相同,降低了学习成本、提升开发效率
JSX 是 React 的核心内容。

3 使用步骤

  1. 使用 JSX 语法创建 react 元素
// 使用 JSX 语法,创建 react 元素:
const title = <h1>Hello JSX</h1>
  1. 使用 ReactDOM.render() 方法渲染 react 元素到页面中
// 渲染创建好的React元素
ReactDOM.render(title, root)

小结

  1. 推荐使用JSX语法创建React元素
  2. 写JSX就跟写HTML一样,更加直观、友好
  3. JSX语法更能体现React的声明式特点(描述UI长什么样子)
  4. 使用步骤:
// 1 使用JSX创建react元素
const title = <h1>Hello JSX</h1>
// 2 渲染创react元素
ReactDOM.render(title, root)

为什么脚手架中可以使用 JSX 语法?

  1. JSX 不是标准的 ECMAScript 语法,它是 ECMAScript 的语法扩展。
  2. 需要使用 babel 编译处理后,才能在浏览器环境中使用。
  3. create-react-app 脚手架中已经默认有该配置,无需手动配置。
  4. 编译 JSX 语法的包为:@babel/preset-react

4 注意点

  1. React元素的属性名使用驼峰命名法
  2. 特殊属性名:class -> className、for -> htmlFor、tabindex -> tabIndex 。
  3. 没有子节点的React元素可以用 /> 结束 。
  4. 推荐:使用小括号包裹 JSX ,从而避免 JS 中的自动插入分号陷阱。
// 使用小括号包裹 JSX
const dv = (
<div>Helo JSX</div>
)

2. JSX 中使用 JavaScript 表达式

嵌入 JS 表达式

  • 数据存储在JS中
  • 语法:{ JavaScript表达式 }
  • 注意:语法中是单大括号,不是双大括号!
const name = 'Jack'
const dv = (
<div>你好,我叫:???</div>
)
const name = 'Jack'
const dv = (
<div>你好,我叫:{name}</div>
)

注意点

  • 单大括号中可以使用任意的 JavaScript 表达式
  • JSX 自身也是 JS 表达式
  • 注意:JS 中的对象是一个例外,一般只会出现在 style 属性中
  • 注意:不能在{}中出现语句(比如:if/for 等)
const h1 = <h1>我是JSX</h1>
const dv = (
<div>嵌入表达式:{h1}</div>
)

3. JSX 的条件渲染

  • 场景:loading效果
  • 条件渲染:根据条件渲染特定的 JSX 结构
  • 可以使用if/else或三元运算符或逻辑与运算符来实现
const loadData = () => {
if (isLoading) {
return <div>数据加载中,请稍后...</div>
}
return (
<div>数据加载完成,此处显示加载后的数据</div>
)
}
const dv = (
<div>
{loadData()}
</div>
)

4. JSX 的列表渲染

如果要渲染一组数据,应该使用数组的 map() 方法

const songs = [
{id: 1, name: '痴心绝对'},
{id: 2, name: '像我这样的人'},
{id: 3, name: '南山南'},
]

const list = (
<ul>
{songs.map(item => <li>{item.name}</li>)}
</ul>
)
  • 如果要渲染一组数据,应该使用数组的 map() 方法
  • 注意:渲染列表时应该添加 key 属性,key 属性的值要保证唯一
  • 原则:map() 遍历谁,就给谁添加 key 属性
  • 注意:尽量避免使用索引号作为 key
const songs = [
{id: 1, name: '痴心绝对'},
{id: 2, name: '像我这样的人'},
{id: 3, name: '南山南'},
]

const list = (
<ul>
{songs.map(item => <li key={item.id}>{item.name}</li>)}
</ul>
)

5. JSX 的样式处理

1. 行内样式 —— style

<h1 style={{ color: 'red', backgroundColor: 'skyblue' }}>
JSX的样式处理
</h1>

2. 类名 —— className(推荐)

<h1 className="title">
JSX的样式处理
</h1>

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

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

相关文章

通信原理笔记—增量调制(∆M)

目录 概述&#xff1a; 简单增量调制(∆M)原理&#xff1a; 编码器与解码器 简单△M的过载问题&#xff1a; 增量总和(∆-Σ)调制 数字压扩自适应增量调制&#xff1a; 不同编码调制方式的误码性能分析&#xff1a; 概述&#xff1a; 最简单的DPCM是增量调制&#xff0c…

layui框架学习(4:导航)

layui官网教程采用html中的无序列表和定义列表来实现导航样式&#xff08;文章最后还有个关于导航所用元素的补充说明&#xff09;&#xff0c;主要包括水平导航、垂直/侧边导航&#xff0c;同时还支持用span和a元素实现面包屑导航样式。导航功能需要加载element模块&#xff0…

实验二:Linux主机漏洞利⽤攻击实践

&#xff08;一&#xff09;实验简介 实验所属系列&#xff1a;windows主机漏洞利用攻击实践 实验对象&#xff1a;本科/专科信息安全专业 相关课程&#xff1a;渗透测试 实验时数&#xff08;学分&#xff09;&#xff1a;2学时 实验类别&#xff1a;实践类 &#xff08;二&a…

如何集中式管理多个客户端节点传输任务-镭速

在一些生产制造企业或it部门&#xff0c;它们的生产机器设备每天都会有大量的生产数据&#xff0c;并且需要人为地对这些数据进行迁移或者归档备份到其他存储。这样重复性的操作&#xff0c;无疑大大提高了人工成本&#xff0c;而且运作起来的效率也不高。 镭速服务器集中式任务…

MySQL优化方案

一、MySQL 的优化方案有哪些&#xff1f;MySQL 数据库常见的优化手段分为三个层面&#xff1a;SQL 和索引优化、数据库结构优化、系统硬件优化等&#xff0c;每个大的方向中又包含多个小的优化点。1.SQL 和索引优化通过优化 SQL 语句以及索引来提高 MySQL 数据库的运行效率① 使…

【UE5】动画系统

title: 【UE5】动画系统 date: 2023-01-31 19:50:47 tags: UE5 categories: 学习笔记 password: abstract: message: 最近接触的项目涉及到动捕和动画&#xff0c;以前接触的范围主要是GamePlay以及C和蓝图的交互&#xff0c;很少接触动画&#xff0c;借此机会学习一下UE5的动…

【Jmeter】报错解决:JedisException: Could not return the broken resource to the pool

一、报错详情 (1)报错场景 使用 Jmeter 插件 Redis Data Set 配置连接 Redis 数据池时,运行出现报错 (2)报错日志

Python对liunx中mysql数据库进行单表查询 10个案例带你了解

关于Python连接liunx中mysql数据库的方式在这一篇文章 这里写目录标题1.在Liunx服务器中的mysql新建一个表2.插入数据3.连接liunx中的mysql数据库1、查询1946班的成绩信息2&#xff0c;查询1944班&#xff0c;语文成绩大于60小于90的成绩信息3&#xff0c;查询学生表中1到6行的…

QTabWidget 美化 qss

1. tab&#xff0c; tab-bar&#xff0c; pane属性分布 2. 使用qss美化时&#xff0c;tab标签上和pane中都能美化成功&#xff0c;但tab最右侧的tab-bar却始终没有成功。 /*设置控件的背景*/ QTabWidget {background-color:rgb(4,138,224); } /*设置控件下面板的背景颜色*/ QT…

C++11 常用的新特性

本篇介绍C11标准对比之前C标准的新特性&#xff0c;C11为C语言在2011年发布的版本&#xff0c;它改进幅度很大&#xff0c;影响至今。如加入auto 关键字、nullptr、移动语义&#xff08;move semantics&#xff09;、委托构造函数&#xff08;delegating constructors&#xff…

ChatGPT超详细注册与使用教程

文章目录前言一、ChatGPT账号注册二、SMS-ACTIVATE虚拟手机号验证三、ChatGPT使用总结前言 最近ChatGPT非常火爆&#xff0c;是一种革命性的技术&#xff0c;这也吸引来了很多人想尝试一下&#xff0c;但是由于并没有在国内开通这项服务&#xff0c;所以国内的用户无法使用Chat…

Javascript预解析

1.我们js引擎运行js 分为两步&#xff0c;1.预解析&#xff0c;2.执行代码 &#xff08;1&#xff09;预解析&#xff1a;js引擎会把js里面所有的var还有function提升到当前作用域发的前面 &#xff08;2&#xff09;执行代码&#xff1a;按照代码书写的顺序从上往下执行 2.预…

RK3588平台开发系列讲解(进程篇)进程的处理器亲和性

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、简介二、相关结构体三、函数接口四、cpuset的使用沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇介绍进程的处理器亲和性相关知识。 一、简介 Linux进程调度器为了充分利用CPU资源,会将进程在不同的…

如何养成整洁的代码习惯

如何养成整洁的代码习惯前言1.为什么要保持代码整洁?1.1 所以从一开始就要保持整洁1.2 如何写出整洁的代码?2.命名2.1 不好的命名方式1.没有任何意义的命名方式2.命名前后不一致3.命名冗余3.类3.1单一职责3.2 开闭原则3.3 内聚4.函数4.1 只做一件事4.2 函数命名1.函数名应见名…

春季开学必备物品清单、数码好物推荐篇

开学的脚步近了&#xff0c;近了&#xff0c;大学生返校&#xff0c;万物更新&#xff0c;大家迎接开学季的阵仗堪比迎接春天了。灵魂发问&#xff1a;开学装备备齐了吗&#xff1f;大学生们的情绪调整好了吗&#xff1f;自己要不要再回回炉&#xff0c;充充电&#xff1f;这次…

【redis6】第十二章(持久化)

RDB RDB是什么 在指定的时间间隔内将内存中的数据集快照写入磁盘&#xff0c; 也就是行话讲的SNAPSHOT快照&#xff0c;它恢复时是将快照文件直接读到内存里 备份是如何执行的 Redis会单独创建&#xff08;fork&#xff09;一个子进程来进行持久化&#xff0c;会先将数据写…

ARM学习(17)ARM函数调用规则

笔者来聊聊ARM的函数的调用规则 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&…

观点动力学模型:主要理论与模型综述

文章目录意见动态建模图论DeGroot 模型Friedkin-Johnsen models社会权力演变自我评价反映的演变DeGroot-Friedkin模型(DeGroot)的新研究最终社会权力的分析动态相对互动拓扑相似时间尺度&#xff0c;记忆和噪声表达观点(expressed opinion)和私人观点(private opinion)EPO模型意…

学完python再学Java顺利吗,学完python再学Java要多久

这篇文章主要介绍了学完python再学C会不会轻松一点&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 1、学编程先学python&#xff0c;然后学java可以吗&#xff1f; 建议先学J…

solidity Dapp 从签名中提取消息签名地址

通常, ECDSA&#xff08;椭圆曲线数字签名算法&#xff09;包含两个参数, r 和 s. 在以太坊中签名包含第三个参数 v,它可以用于验证哪一个账号的私钥签署了这个消息。 Solidity 提供了一个内建函数 ecrecover 它接受 r, s and v 作为参数并且返回签名这的地址。我们如何进行测试…