重学React(一):描述UI
背景:React现在已经更新到19了,文档地址也做了全面的更新,上一次系统性的学习还是在16-17的大版本更新。所以,现在就开始重新学习吧~
学习内容:
- React官网教程:https://zh-hans.react.dev/learn/describing-the-ui
- 其他辅助资料(看到再补充)
补充说明:这次学习更多的是以学习笔记的形式记录,看到哪记到哪
1. 基础知识
React 应用是由被称为 组件 的独立 UI 片段构建而成。React 组件本质上是可以任意添加标签的 JavaScript 函数
React 允许你将标签、CSS 和 JavaScript 组合成自定义“组件”,即 应用程序中可复用的 UI 元素
React 组件是一段可以使用标签进行扩展 的 JavaScript 函数,组件的名称必须以大写字母开头(React的语法规定,这样它才能分清是React组件还是正常的html标签)
// export default 导出声明
// function Profile 定义函数,function名必须首字母大写export default function Profile() {
// return 如果换行,就必须用()将内容包裹
// 没有括号包裹的话,任何在 return 下一行的代码都将被忽略!return (<imgsrc="https://i.imgur.com/MK3eW3Am.jpg"alt="Katherine Johnson"/>)// 或者 标签只有一行的时候括号可以省略return <img src="https://i.imgur.com/MK3eW3Am.jpg" alt="Katherine Johnson" />)
}// 你可以只定义组件一次,然后按需多处和多次使用
export default function Gallery() {return (<section><h1>了不起的科学家</h1><Profile /><Profile /><Profile /></section>);
}// 组件不建议嵌套组件定义,不然会很慢并且可能会有bug产生
export default function Gallery() {// 🔴 永远不要在组件中定义组件function Profile() {// ...}// ...
}// 使用时可以import './Gallery.js' 或者 './Gallery',在 React 里都能正常使用,只是前者更符合 原生 ES 模块
import Gallery from './Gallery';
import Gallery from './Gallery.js';
导出方式
默认导出 vs 具名导出
一个文件里有且仅有一个 默认 导出,但是可以有任意多个 具名 导出
当使用默认导入时,可以在 import 语句后面进行任意命名。比如 import Banana from ‘./Button.js’。相反,对于具名导入,导入和导出的名字必须一致。
同一文件中,有且仅有一个默认导出,但可以有多个具名导出
语法 | 导出语句 | 导入语句 |
---|---|---|
默认 | export default function Button() {} | import Button from ‘./Button.js’; |
具名 | export function Button() {} | import { Button } from ‘./Button.js’; |
JSX
- 只能返回一个根元素
在一个组件中包含多个元素,需要用一个父标签把它们包裹起来,如果不想添加新的dom元素,可以使用<>...</>(Fragment)
,React Fragment 允许将子元素分组,而不会在 HTML 结构中添加额外节点
原因:JSX 虽然看起来很像 HTML,但在底层其实被转化为了 JavaScript 对象,你不能在一个函数中返回多个对象,除非用一个数组把他们包装起来 - 标签必须闭合
这是强制规定,要么自闭合(<img />
),要么添加闭合标签(<li>...</li>
) - 使用驼峰式命名法给大部分属性命名
JSX 最终会被转化为 JavaScript,而 JSX 中的属性也会变成 JavaScript 对象中的键值对。组件经常会遇到需要用变量的方式读取这些属性的时候。但 JavaScript 对变量的命名有限制,所以需要避开这些限制- 变量名称不能包含 - 符号,所以属性大部分用驼峰
- 变量不能用保留字如class,所以在jsx中用className代替
- 由于历史原因,aria-* 和 data-* 属性是以带 - 符号的 HTML 格式书写的
需要将一个字符串属性传递给 JSX 时,把它放到单引号或双引号
// "" 引号中的内容按照字符串的形式处理,单引号双引号都可以,但使用双引号会多点
// {} 大括号中的内容会被动态引用,直接在标签中使用 JavaScript,可以在其他地方声明,在使用的时候直接读取js对应的值
// 大括号内的任何 JavaScript 表达式都能正常运行
export default function Avatar() {
const alt = "Gregorio Y. Zara"
//return (<imgclassName="avatar"src="https://i.imgur.com/7vQD0fPs.jpg"alt={alt}/>);
}
大括号使用场景:
- 用作 JSX 标签内的文本:
<h1>{name}'s To Do List</h1>
是有效的,但是<{tag}>Gregorio Y. Zara's To Do List</{tag}>
无效。 - 用作紧跟在 = 符号后的 属性:
src={avatar}
会读取 avatar 变量,但是src="{avatar}"
只会传一个字符串 {avatar}
在JSX中还可以传递对象,对象也是用大括号表示,所以要引用对象的时候就需要使用两个括号
JSX 是一种模板语言的最小实现,因为它允许你通过 JavaScript 来组织数据和逻辑
Props
React 组件使用 props 来互相通信。每个父组件都可以提供 props 给它的子组件,从而将一些信息传递给它,包括对象、数组和函数等
import { getImageUrl } from './utils.js';
// props是组件的唯一参数
// function里使用大括号获取props是解构
// 也可以写成这样
// function Avatar(props) {
// const person = props.person
// const size = props.size
// }
// 如果你想在没有指定值的情况下给 prop 一个默认值,可以通过在参数后面写 = 和默认值来进行解构
// 默认值仅在缺少 size prop 或 size={undefined} 时生效,等于null都不行
function Avatar({ person, size=100 }) {
// person 和 size 是可访问的return (<imgclassName="avatar"src={getImageUrl(person)}alt={person.name}width={size}height={size}/>);
}export default function Profile() {
// 这样使用不同的参数,就能展示出两个类似但是又独立的组件,这就是组件复用一个很重要的意义return (<div><Avatarsize={100}person={{ name: 'Katsuko Saruhashi', imageId: 'YfeOqp2'}}/><Avatarsize={80}person={{name: 'Aklilu Lemma', imageId: 'OKS67lh'}}/></div>);
}// 还可以使用 JSX 展开语法传递 props
// 像这个场景,props里面所有的内容都是需要传递到Avatar组件中时,就可以直接用展开语法传递
function Profile({ person, size, isSepia, thickBorder }) {return (<div className="card"><Avatarperson={person}size={size}isSepia={isSepia}thickBorder={thickBorder}/></div>);
}
// 可以写成这样
function Profile(props) {return (<div className="card"><Avatar {...props} /></div>);
}
// 假设Profile 中isSepia不需要传递,其他都需要,还可以写成这样
function Profile({isSepia, ...rest}) {return (<div className="card"><Avatar {...rest} /></div>);
}
当你将内容嵌套在 JSX 标签中时,父组件将在名为 children 的 prop 中接收到该内容
通俗的来说就是某个组件标签内容,在接收的时候会自动处理成children的props
<Aaa><div>里面是一系列的内容</div> </Aaa>
,在声明Aaa这个组件时,有一个隐藏props,children,表示的就是div及其包裹的内容
可以将带有 children prop 的组件看作有一个“洞”,可以由其父组件使用任意 JSX 来“填充”
import Avatar from './Avatar.js';function Card({ children }) {return (<div className="card">{children}</div>);
}export default function Profile() {return (<Card><Avatarsize={100}person={{ name: 'Katsuko Saruhashi',imageId: 'YfeOqp2'}}/></Card>);
}
props 是 不可变的。当一个组件需要改变它的 props(例如,响应用户交互或新数据)时,它不得不“请求”它的父组件传递 不同的 props —— 一个新对象!它的旧 props 将被丢弃,最终 JavaScript 引擎将回收它们占用的内存
Props 是只读的时间快照:每次渲染都会收到新版本的 props
你不能改变 props。当你需要交互性时,你可以设置 state。
渲染
在 React 中,你可以通过使用 JavaScript 的 if 语句、&& 和 ? : 运算符来选择性地渲染 JSX
相关文章:
重学React(一):描述UI
背景:React现在已经更新到19了,文档地址也做了全面的更新,上一次系统性的学习还是在16-17的大版本更新。所以,现在就开始重新学习吧~ 学习内容: React官网教程:https://zh-hans.react.dev/lea…...
代理模式(Proxy Pattern)详解:以延迟加载图片为例
在日常开发中,是否遇到过以下问题: “程序启动时图片太多,加载太慢!” “用户还没看到图片就已经开始加载了,性能浪费!” 此时,代理模式(Proxy Pattern)便派上了用场。本…...
Power BI企业运营分析——数据大屏搭建思路
Power BI企业运营分析——数据大屏搭建思路 欢迎来到Powerbi小课堂,在竞争激烈的市场环境中,企业运营分析平台成为提升竞争力的核心工具。 整合多源数据,实时监控关键指标,精准分析业务,快速识别问题机遇。其可视化看…...
HCIP-H12-821 核心知识梳理 (5)
Portal 认证场景中 AC 与 Portal 服务器通信使用的 Portal 协议基于 TCP;HTTP/HTTPS 可作为接入与认证协议;缺省情况下,接入设备处理 Portal 协议报文及向 Portal 服务器主动发送报文的目的端口号均为 50100 VRRP 协议心跳报文缺省发送间隔为…...
从M个元素中查找最小的N个元素时,使用大顶堆的效率比使用小顶堆更高,为什么?
我们有一个长度为 M 的数组,现在我们想从中找出 最小的 N 个元素。例如: int a[10] {12, 3, 5, 7, 19, 0, 8, 2, 4, 10};从中找出 最小的 4 个元素。 正确方法:使用大小为 N 的「大顶堆」 原因分析: 我们想保留最小的 4 个元素…...
【AI工具】2025年主流自动化技术(供参考)
背景 前面完成了AutoIT的自动化操作的尝试,有惊喜有惊吓,就是能进行自动化控制,但是有点“笨”,于是就想找找同类好用的技术,有了这篇自动化技术比较分析的文档,资料参考了AI总结的内容。 autoit的使用&am…...
1.微服务拆分与通信模式
目录 一、微服务拆分原则与策略 业务驱动拆分方法论 • DDD(领域驱动设计)中的限界上下文划分 • 业务功能正交性评估(高内聚、低耦合) 技术架构拆分策略 • 数据层拆分(垂直分库 vs 水平分表) • 服务粒…...
【Java面试笔记:基础】4.强引用、软引用、弱引用、幻象引用有什么区别?
1. 引用类型及其特点 强引用(Strong Reference): 定义:最常见的引用类型,通过new关键字直接创建。回收条件:只要强引用存在,对象不会被GC回收。示例:Object obj = new Object(); // 强引用特点: 强引用是导致内存泄漏的常见原因(如未及时置为null)。手动断开引用:…...
使用Python+OpenCV将多级嵌套文件夹下的视频文件抽帧为JPG图片
使用PythonOpenCV将多级嵌套文件夹下的视频文件抽帧为JPG图片 import os import cv2 import time# 存放视频文件的多层嵌套文件夹路径 videoPath D:\\videos\\ # 保存抽帧的图片的文件夹路径 savePath D:\\images\\if not os.path.exists(savePath):os.mkdir(savePath) vide…...
基于STM32的室内环境监测系统
目录 一、前言 二、项目功能说明 三、主要元器件 四、接线说明 五、原理图与PCB 六、手机APP 七、完整资料 一、前言 项目成品图片: 哔哩哔哩视频链接: 咸鱼商品链接: 基于STM32的室内环境监测系统商品链接 二、项目功能说明 基础功…...
乐迪电玩发卡查分与控制面板模块逻辑解析
本篇为《美乐迪电玩全套系统搭建》系列的第四篇,聚焦后台功能模块中的发卡与查分系统。针对运营侧常见需求(如玩家状态查验、补卡操作、积分调整等),本篇将完整剖析其 PHP 端实现逻辑、数据结构及权限管理机制。 一、模块结构与入…...
Spring 事务实现原理,Spring 的 ACID是如何实现的?如果让你用 JDBC 实现事务怎么实现?
Spring 事务实现原理 Spring 的事务管理基于 AOP(面向切面编程) 和 代理模式,通过以下核心组件实现: 事务管理器(PlatformTransactionManager) Spring 提供了统一的事务抽象接口(如 DataSource…...
网络原理 - 4(TCP - 1)
目录 TCP 协议 TCP 协议段格式 可靠传输 几个 TCP 协议中的机制 1. 确认应答 2. 超时重传 完! TCP 协议 TCP 全称为 “传输控制协议”(Transmission Control Protocol),要对数据的传输进行一个详细的控制。 TCP 协议段格…...
SVT-AV1编码器中的模块
一 模块列表 1 svt_input_cmd_creator 2 svt_input_buffer_header_creator 3 svt_input_y8b_creator 4 svt_output_buffer_header_creator 5 svt_output_recon_buffer_header_creator 6 svt_aom_resource_coordination_result_creator 7 svt_aom_picture_analysis_result_creat…...
金融数据分析(Python)个人学习笔记(12):网络爬虫
一、导入模块和函数 from bs4 import BeautifulSoup from urllib.request import urlopen import re from urllib.error import HTTPError from time import timebs4:用于解析HTML和XML文档的Python库。 BeautifulSoup:方便地从网页内容中提取和处理数据…...
子网划分的学习
定长子网划分(Fixed-length Subnetting) 也叫做固定长度子网划分,是指在一个IP网络中,把网络划分成若干个大小相等的子网,每个子网的子网掩码长度是一样的。 一、定长子网划分的背景 在早期的IP地址分配中࿰…...
Spark2 之 memorypool
cpp/core/memory/ArrowMemoryPool.cc cpp/core/memory/MemoryAllocator.cc VeloxMemoryManager cpp/velox/memory/VeloxMemoryManager.cc VeloxMemoryManager::VeloxMemoryManager(const std::string& kind, std::unique_ptr<AllocationListe...
短视频+直播商城系统源码全解析:音视频流、商品组件逻辑剖析
时下,无论是依托私域流量运营的品牌方,还是追求用户粘性与转化率的内容创作者,搭建一套完整的短视频直播商城系统源码,已成为提升用户体验、增加商业变现能力的关键。本文将围绕三大核心模块——音视频流技术架构、商品组件设计、…...
IO流详解
IO流 用于读写数据的(可以读写文件,或网络中的数据) 概述 I指 Input,称为输入流:负责从磁盘或网络上将数据读到内存中去 O指Output,称为输出流,负责写数据出去到网络或磁盘上 因此ÿ…...
linux下使用wireshark捕捉snmp报文
1、安装wireshark并解决wireshark权限不足问题 解决linux普通用户使用Wireshark的权限不足问题_麒麟系统中wireshark 运行显示权限不够-CSDN博客 2、Linux下安装并配置SNMP软件包 (deepseek给出的解答,目前会产生request包,但是会连接不上&a…...
ClickHouse 设计与细节
1. 引言 ClickHouse 是一款备受欢迎的开源列式在线分析处理 (OLAP) 数据库管理系统,专为在海量数据集上实现高性能实时分析而设计,并具备极高的数据摄取速率 1。其在各种行业中得到了广泛应用,包括众多知名企业,例如超过半数的财…...
Spring Boot 启动生命周期详解
Spring Boot 启动生命周期详解 1. 启动阶段划分 Spring Boot 启动过程分为 4个核心阶段,每个阶段涉及不同的核心类和执行逻辑: 阶段 1:预初始化(Pre-initialization) 目标:准备启动器和环境配置关键类&am…...
使用Java对接StockTV全球金融数据API。马来西亚金融数据API
以下是一篇关于如何使用Java对接StockTV API的教程博客,基于您提供的接口文档编写: 使用Java对接StockTV全球金融数据API 一、API简介 StockTV提供覆盖全球40交易所的实时金融市场数据,包括: 股票:印度、美股、A股等…...
逐位逼近法计算对数的小数部分
逐位逼近法(Bit-by-Bit Approximation)是一种通过 迭代和位操作 高效计算数学函数(如对数、平方根等)的方法。它特别适用于 不支持浮点运算的环境(如区块链智能合约),因为所有计算均通过 整数乘…...
SpringbootWeb开发(注解和依赖配置)
Lombok 工具 Spring Web web开发相关依赖 MyBatis Framework MyBatis驱动 MySQL Driver MySql驱动包 Restful 风格 Slf4j 记录日志对象 RequestMapping(value “/depts”, method RequestMethod.GET) //指定请求方式为GET method 指定请求方式 GetMapping 限定请求方式为Get…...
【AI News | 20250422】每日AI进展
AI Repos 1、no-ocr 不需要复杂文本提取的 AI 文档处理工具,只需上传 PDF 文件,即可快速搜索或询问关于多个文档集合中的内容,无需依赖传统 OCR 技术,大大提升文档分析效率。创建和管理 PDF/文档集合,按"案例&qu…...
110. 平衡二叉树
目录 一、问题描述 二、解题思路 三、代码 四、复杂度分析 一、问题描述 给定一个二叉树,判断它是否是 平衡二叉树 二、解题思路 ✅ 平衡二叉树的定义 一棵二叉树是平衡的,满足以下两个条件: 左子树是平衡二叉树; 右子树…...
yarn的介绍与操作,yarn和npm的选择
🧶 一、Yarn 是什么? Yarn 是由 Facebook(Meta)开发的 JavaScript 包管理工具,用于替代 npm,解决它在早期版本中存在的一些问题。 ✅ Yarn 的优势(v1.x): ὎…...
人工智能赋能医疗影像诊断:开启精准医疗新时代
在当今数字化、智能化飞速发展的时代,人工智能(AI)技术正逐渐渗透到各个行业,其中医疗领域更是成为了 AI 技术大展身手的重要舞台,而医疗影像诊断作为医疗行业中的关键环节,正因 AI 的赋能而发生着深刻变革…...
【汽车ECU电控数据管理篇】S19文件格式解析篇章
一、S19格式是啥 在电控文件管理的初期阶段,我首次接触到的是 A2L 和 HEX 文件。其中,A2L 文件主要承担着描述性功能,它详细地描述了各种参数和配置等相关信息。而 HEX 文件则是一种刷写文件,其内部明确记录了具体的地址以及对应的…...
快速定位达梦缓存的执行计划并清理
开发告诉你一个sql慢,你想看看缓存中执行计划时,怎么精准快速定位? 可能一般人通过文本内容模糊搜索 select cache_item, substr(sqlstr,1,60)stmt from v$cachepln where sqlstr like %YOUR SQL STRING%; 搜出来的内容比较多,研…...
Windows 同步-Windows 单向链表和互锁链表
Windows 单向链表(SList)同步机制详解 核心概念 SList(Singly-Linked List)是一种基于非阻塞算法实现的线程安全链表结构,具有以下特性: 原子性操作:所有插入/删除操作均通过硬件级原…...
Trent硬件工程师培训完整135讲
课程大小:44.2G 课程下载:https://download.csdn.net/download/m0_66047725/90616401 更多资源下载:关注我 ├──135讲配套资料 | ├──4620afc.pdf 707.58kb | ├──4620fa_chs.pdf 880.23kb | ├──4630fa.pdf 695.36kb | ├─…...
[PTA]2025 CCCC-GPLT天梯赛 胖达的山头
来源:L2-055 胖达的山头-Pintia题意:给定 n n n 个事件的起始和终止时刻(以hh:mm:ss给出),求最多并行事件数。关键词:差分(签到,模板题)题解:将所有时刻转换为秒,当某事件开始1,结束则-1。按时…...
CSS 记载
CSS优先级 是通过一个权重值来决定的,这个权重值由以下几个部分组成: 内联样式:直接写在HTML元素的style属性中,权重最高。ID选择器:权重值为100。类选择器、属性选择器和伪类:权重值为10。元素选择器和伪…...
ESP32音频识别(FFT)实测调整(ESP-IDF 5.4)
#ifndef YC_AUDIO_H #define YC_AUDIO_H // I2S配置(根据硬件调整) #define I2S_CHANNEL I2S_NUM_0 #define I2S_BCK_PIN 42 #define I2S_WS_PIN 41 #define I2S_DATA_PIN 2 /*======= 系统配置 =======*/ #define FFT_SIZE 4096 // …...
解决找不到字体的问题
PlayerView在创建的时候回生成一个PlayerControlView,PlayerControlView构造方法中会用到字体。这个字体在某些机型上找不到。导致应用崩溃。报错信息大概是这样的 Binary XML file line #14: Error inflating class androidx.media3.ui.PlayerView androidx.media…...
交易所开发:构建高效数字交易枢纽
数字资产交易所在全球数字经济浪潮中已成为价值流通的核心枢纽。本文基于2025年最新技术标准和行业实践,从微秒级撮合引擎到跨链互操作性,从AI增强型风控到合规化路径,系统解析高效数字交易枢纽的构建方法论。 一、技术架构设计:…...
极狐GitLab 项目功能和权限解读
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 项目功能和权限 (FREE ALL) 配置项目功能和权限 要配置项目的功能和权限: 1.在左侧边栏中,选择 搜…...
pdf多文件合并
【第三方工具】点我传送:https://www.ilovepdf.com/ 【java功能实现】 导入jar包 <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artif…...
AI日报 - 2025年4月23日
🌟 今日概览(60秒速览) ▎🤖 AGI突破 | Sam Altman称指向AGI的系统初现端倪,强调安全标准紧迫性;DeepMind CEO预测AI 5-10年内具备科学猜想能力。 AGI定义及测试标准引关注 (Dario Amodei),AI安全与非扩散方法成讨论焦…...
【RAG】一篇文章介绍多模态RAG(MRAG)
一、引言 研究背景与动机:随着大语言模型(LLMs)的广泛应用,其在处理复杂任务时暴露出如产生幻觉、算术能力不足和缺乏可解释性等问题。多模态学习的兴起为解决这些问题提供了新方向,通过融合图像、文本、音频等多种模…...
学习笔记:黑马程序员JavaWeb开发教程(2025.3.25)
11.3 案例-文件上传-本地存储 文件名后缀解决,找到文件最后一个点的位置,截取点及其后面的字符,得到扩展名。代码实现,找到最后一个点的位置,使用方法originalFilename.lastIndexOf(“.”),括号里面是指…...
启动当前文件夹下所有快捷方式批处理bat文件
新建文本文件写入下列代码 echo off chcp 65001 >nul setlocal enabledelayedexpansionfor %%F in (*.lnk) do (echo 正在运行:%%Fstart "" "%%F" )echo 所有快捷方式已启动。 exit 将文件重命名为 start.bat 双击运行...
蓝桥杯算法实战分享:C/C++ 题型解析与实战技巧
蓝桥杯全国软件和信息技术专业人才大赛,作为国内知名的算法竞赛之一,吸引了众多编程爱好者参与。在蓝桥杯的赛场上,C/C 因其高效性和灵活性,成为了众多选手的首选语言。本文将结合蓝桥杯的赛制特点、常见题型以及实战案例…...
IDEA下载kotlin-compiler-embeddable特别慢
问题: 在创建IDEA插件项目时发现 下载kotlin-compiler-embeddable特别慢,然后等待几十分钟然后失败 可以先用控制台显示正在下载的链接,下载好 jar包: https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-compi…...
武装Burp Suite工具:HaE 分析辅助类_插件.【高亮标记和信息提取利器】
武装 Burp Suite 插件:HaE 分析辅助类. HaE 分析辅助类是一款基于正则表达式的高效数据提取与标记工具,常用于安全测试、日志分析等场景,通过预定义规则快速定位敏感信息(如API密钥、URL参数),提升…...
使用Nacos 打造微服务配置中心
一、背景介绍 Nacos 作为服务注册中心的使用方式,同时 Nacos 还可以作为服务配置中心,用于集中式维护各个业务微服务的配置资源。 作为服务配置中心的交互流程图如下。 这样设计的目的,有一个明显的好处就是:有利于对各个微服务…...
C++——多态、抽象类和接口
目录 多态的基本概念 如何实现多态 在C中,派生类对象可以被当作基类对象使用 编程示例 关键概念总结 抽象类 一、抽象类的定义 基本语法 二、抽象类的核心特性 1. 不能直接实例化 2. 派生类必须实现所有纯虚函数才能成为具体类 3. 可以包含普通成员函数和…...
模拟实现strncat、qsort、atoi
目录 前言 一、模拟实现strncat 参数 代码演示: 二、模拟实现qsort 参数 代码演示: 前言 本文主要是对strncat,qsort,atoi的模拟实现 一、模拟实现strncat C 库函数 char *strncat(char *dest, const char *src, size_t n…...