react基础入门
1,了解react
react并不是一个MVC框架,他只是一个很强大的javaScript库,主要作用是用来构建UI界面。
react的核心是封装一个个大大小小的组件(小到一个按钮,大到一个页面)来构建复杂的UI界面,每个组件都是UI的一部分。
react的组件就是返回标签的javaScript函数。例如:
function MyButton() {
return ( <button>I'm a button</button> );
}
2,react特点
- 速度快 - react使用虚拟DOM
- 跨浏览器兼容 - 因为虚拟DOM,提供了标准的API,解决了不同浏览器的语法不同问题
- 组件化 - 将每个模块都抽成组件,提升了可维护性
- 单向数据流 - 数据对应DOM树从上到下流动,数据流更清晰,组件的状态就更可控
- 纯粹的javaScript语法 - 没有react的单独语法,因此在react中,一些皆js
3,react组件
3.1 了解组件
从以上概念可知,react组件就是一部分的js逻辑,封装的独立的可复用的代码片段,这样每个片段都可以进行独立的管理,很好的实现了代码的复用。
注意:组件的首字母必须要大写
3.2 组件分类
函数(function)组件:
函数式组件其实就是官网的标准案例,定义一个函数,接受任意的props参数,函数中返回jsx语法的页面UI内容。
示例:
export default function MyApp() { return ( <div> <h1>Welcome to my app</h1> <MyButton /> </div> );
}
类(class)组件:
通过声明ES6中的类(class)来定义一个React组件。其中,必须要继承React.Component类或React.PureComponent类;类中必须要定义一个名为render的函数,该函数的返回值是JSX语法编写的React元素。
class组件不同于函数组件的是,class组件会创建对应的实例,因此只有class组件才有生命周期
注意:
- 类的内部默认会有个props属性(继承自Component),可以直接使用
- 在类的构造函数(constructor)中通过this.props访问属性值是获取不到的,因为这时props还没有挂载到this.props上,等到constructor执行完成之后才会挂载(除非把外面传进来的props传递给constructor中的父类构造函数super从而实现this.props的挂载)
- 类组件是动态组件,基于数据驱动视图渲染
示例:
// 创建一个类式组件
import React from 'react'
class Mycomponent extends React.Component { constructor(props){ super(props) }render(){ return( <div>hello Mycomponent!</div> ) }
}
export default Mycomponent // 渲染到页面中的指定DOM
// ReactDOM.render(虚拟DOM,真实DOM)
ReactDOM.render(<MyComponent />, document.getElementById('test'))
let c = new MyComponent()
3.3 组件数据传递
如果想传递数据给子组件,可通过props方式:
(1)在引用组件的标签处通过 props属性名={属性值} 的方式来设置传入的props
(2)在子组件入参处通过解构的方式获取props
示例:
function MyApp() {// 传递给MyLabel组件两个props,info和heightreturn (<MyLabelinfo={{ name: '张三', id: '123' }}height={100}/>);
}// MyLabel组件,可以获取传入的props
function MyLabel({info, height}) {// ... ...
}
4,了解JSX语法
概念:JSX(JavaScript XML)首先被应用在react中,他是一种javaScript语法的扩展,比较类似于模板语言。他最终产生的是js对象,既不是字符串(不要加引号)也不是html/xml标签。
作用:用来简化创建虚拟DOM,使代码更简洁,更容易维护。
需要注意的规则:
- 标签首字母小写,则会被转换成html的同名元素,如果html没有这个元素,就报错
- 标签首字母大写,则react就会渲染对应的组件,如果没有定义该组件,就报错
- 标签属性没有引号,通常使用大扩号{},表示大括号内可以使用js表达式
(eg:const myId = "123"; <h1 id={myId}>Hello,</h1>)
- 内联样式style={{key:value}}有两个大括号,第一个括号表示里面是一个js表达式,第二个括号表示里面是一个键值对(eg:<span style={{color:'#e0e0e0', fontSize:18}}>内容</span>)
- 虚拟DOM只能有一个根标签
- 属性使用小驼峰形式写法(eg:font-size写成fontSize)
- 必须闭合标签
- 与js的对象不同,js对象放在不同的地方创建是不同的引用,并不恒等于。但是只要JSX的返回值一样,就是相等。
参考:JSX基本语法规则
HTML转换JSX的辅助工具:HTML to JSX
5,条件渲染
在React使用的JSX语法中,同样支持与js相同的条件渲染if else、三目运算? :、&&语法等。
其中&&运算符的使用及其注意事项:
&&运算符作用是:左侧为true时,渲染右侧JSX,否则不渲染。
其中左侧不能是数字,只能是布尔值。例如假设count为数字,表达式要写count > 0 && <span>而不能写count && <span>
6,列表渲染
在React使用的JSX语法中,列表渲染通常是使用map方法遍历和filter方法过滤。
map()方法使用注意:
直接放在 map() 方法里的 JSX 元素一般都需要指定全局唯一的key值。目的为了让react能够精准定位到每个元素,同时其后续发生了变化可以高效准确的更新DOM树。
所以不要设置index索引,不要设置random随机数,因为随机数会导致每次重新渲染都会重新创建DOM。
7,更新界面useState和HOOK
useState使用:
(1)引入useState:import { useState } from 'react';
(2)自定义state变量和set方法:const [sth, setSth] = useState(initialValue)
(3)使用:通过sth直接取值,通过setSth(value)更新值
HOOK理解:
以useXXX开头的函数被称为HOOK,React内置了很多的HOOK供用户使用,useState就是其中一种。其他的还有useContext(读取和订阅组件中的context)、useRef(帮助引用一个不需要渲染的值)等。具体可查看官方API
同时React支持自定义HOOK。
HOOK的调用说明:
HOOK的要求比较严格,必须在组件顶层调用,如果想在一个循环或者条件逻辑中调用,只能再抽一个子组件放在顶层调用。
8,ref的使用
ref概念:组件内的标签可以定义ref属性来标识自己。
ref的应用:
(1)字符串(已废弃):最早的用法。就是和vue的ref一样,使用ref在节点上定义后,通过this.refs[refName]来引用真实的dom节点。
<input ref="inputRef" /> // this.refs['inputRef']来访问
(2)回调形式的ref:就是在dom节点或组件上挂载函数,函数的入参是dom节点或组件实例,达到的效果和字符串一致,获取当前节点的引用。
<input ref={(input)=>{this.inputValue = input}} type="text"/>
(3)通过React.createRef()方法:createRef()方法创建一个ref容器,将其赋值给一个变量。
class Child extends React.Component{constructor(props){super(props);this.myRef = React.createRef(); // 创建ref容器,并赋值给myRef}componentDidMount(){console.log(this.myRef.current);}render(){// dom的ref参数引用myRef的值return <input ref={this.myRef}/>}
}
9,开发者工具react-devtools
开发阶段的辅助工具,更方便的查看react组件,可以在浏览器的F12中辅助使用。
可参考官网使用npm安装,也可以参考此教程使用
10,更多
开源的组件库:
Ant Design - 一套企业级 UI 设计语言和 React 组件库基于 Ant Design 设计体系的 React UI 组件库,用于研发企业级中后台产品。
https://ant.design/index-cn
开发框架:
Next.js - React 应用开发框架 | Next.js中文网Next.js 支持规模化的生产级 React 应用程序。大量世界领先的公司都在使用 Next.js 来构建静态和动态网站及 web 应用。
https://www.nextjs.cn/
官网详细文档:
快速入门 – React 中文文档
https://react.docschina.org/learn
相关文章:
react基础入门
1,了解react react并不是一个MVC框架,他只是一个很强大的javaScript库,主要作用是用来构建UI界面。 react的核心是封装一个个大大小小的组件(小到一个按钮,大到一个页面)来构建复杂的UI界面,每…...
spring boot学习第八篇:通过spring boot、jedis实现秒单
参考:Redis实现分布式锁的7种方案 - 知乎 1、 准备数据库表,如下SQL表示库存表,有主键ID和库存数量字段 CREATE TABLE t_stock (id bigint(20) NOT NULL AUTO_INCREMENT,quantity bigint(20) NOT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEF…...
NineAi 新版AI系统网站源码 ChatGPT
简介: Nine AI.ChatGPT是基于ChatGPT开发的一个人工智能技术驱动的自然语言处理工具,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论文等任务。 NineAi 新版A…...
开源监控服务一瞥:Prometheus、Grafana、Zabbix、Nagios、Icinga和Open-Falcon
前言 随着信息技术的发展,监控服务在维护系统稳定性和性能方面变得越来越重要。本文将比较一些流行的开源监控服务,以帮助你选择适合你需求的解决方案。 监控服务对比 监控服务特点优势不足性能扩展性安全性Prometheus- 多维度数据模型- 监控容器化环…...
使用WAF防御网络上的隐蔽威胁之扫描器
在网络安全领域,扫描器是用于侦察和识别网络系统漏洞的工具。 它们可以帮助网络管理员识别安全漏洞,也可能被攻击者用来寻找攻击目标。 扫描器的基本概念 定义:扫描器是一种自动化工具,用于探测网络和服务器中的漏洞、开放端口、…...
企业信息安全管理制度
随着信息化程度的日益推进,企业信息的脆弱性也日益暴露。如何规范日趋复杂的信息安全保障体系建设,如何进行信息风险评估保护企业的信息资产不受侵害,已成为当前行业实现信息化运作亟待解决的问题。 一、企业的信息及其安全隐患 在我公司&am…...
Qt中的线程池
Qt中的线程池 目录 1 为什么需要线程池 2 Qt中有哪些方式实现线程池 3 如何通过QThreadPool类实现线程池 4 如何通过QtConcurrent库实现线程池 5 如何通过自定义的方式实现线程池 5 小结 1 为什么需要线程池 线程池是多线程编程中常用的一种技术,可以帮助管理系统中…...
使用Spring Boot集成中间件:Elasticsearch基础->提高篇
使用Spring Boot集成中间件:Elasticsearch基础->提高篇 导言 Elasticsearch是一个开源的分布式搜索和分析引擎,广泛用于构建实时的搜索和分析应用。在本篇博客中,我们将深入讲解如何使用Spring Boot集成Elasticsearch,实现数…...
【Docker】Dockerfile构建最小镜像
🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Docker的相关操作吧 目录 🥳🥳Welcome 的Huihuis Code World ! !🥳🥳 前言 一.Dockerfile是什么 二.Dock…...
【严重】GitLab 以其他用户身份执行 Slack 命令
漏洞描述 GitLab 是由GitLab公司开发的、基于Git的集成软件开发平台。使用 Slack 命令在 Slack 聊天环境中运行常见的 GitLab 操作。 GitLab 受影响版本中,由于配置Slack/Mattermost 集成时,未正确验证用户身份信息,导致攻击者可以使用其他…...
【卡梅德生物】纳米抗体文库构建
纳米抗体文库构建服务是一项提供定制化纳米抗体文库的服务,旨在满足研究者和生物制药公司对高质量抗体的需求。这项服务通常包括以下主要步骤: 1.抗原设计和制备: -客户提供目标抗原信息,或由服务提供商协助设计抗原。 -抗原制…...
MySQL修炼手册6:子查询入门:在查询中嵌套查询
目录 写在开头1 子查询基础概念1.1 了解子查询的基本概念1.2 子查询与主查询的关系 2 标量子查询详细展开2.1 学会使用标量子查询2.1.1 在SELECT语句中使用2.1.2 在WHERE子句中使用2.1.3 在ORDER BY子句中使用 2.2 标量子查询在条件判断中的应用2.2.1 使用比较运算符2.2.2 使用…...
01章【JAVA开发入门】
计算机基本概念 计算机组成原理 计算机组装 计算机:电子计算机,俗称电脑。是一种能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。由硬件和软件所组成,没有安装任何软件的计算机称为裸机。常见的形式有台式计算机、…...
ARM day1
一、概念 ARM可以工作的七种模式用户、系统、快中断、中断、管理、终止、未定义ARM核的寄存器个数 37个32位长的寄存器,当前处理器的模式决定着哪组寄存器可操作,且任何模式都可以存取: PC(program counter程序计数器) CPSR(current program…...
ImageNet Classification with Deep Convolutional 论文笔记
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…...
Spring Boot中加@Async和不加@Async有什么区别?设置核心线程数、设置最大线程数、设置队列容量是什么意思?直接在yml中配置线程池
在 Spring 中,Async 注解用于将方法标记为异步执行的方法。当使用 Async 注解时,该方法将在单独的线程中执行,而不会阻塞当前线程。这使得方法可以在后台执行,而不会影响主线程的执行。 在您提供的代码示例中,a1() 和…...
自动化理论基础(2)—开发语言之Python
一、知识汇总 掌握 Python 编程语言需要具备一定的基础知识和技能,特别是对于从事自动化测试等领域的工程师。以下是掌握 Python 的一些关键方面: 基本语法: 理解 Python 的基本语法,包括变量、数据类型、运算符、条件语句、循环…...
Spark算子(RDD)超细致讲解
SPARK算子(RDD)超细致讲解 map,flatmap,sortBykey, reduceBykey,groupBykey,Mapvalues,filter,distinct,sortBy,groupBy共10个转换算子 (一)转换算子 1、map from pyspark import SparkContext# 创建SparkContext对象 sc Spark…...
转盘寿司(100%用例)C卷 (JavaPythonC++Node.jsC语言)
寿司店周年庆,正在举办优惠活动回馈新老客户。 寿司转盘上总共有n盘寿司,prices[i]是第i盘寿司的价格,如果客户选择了第i盘寿司,寿司店免费赠送客户距离,第i盘寿司最近的下一盘寿司i,前提是prices[j]< prices[i],如果没有满足条件的j,则不赠送寿司。 每个价格的寿司都…...
【python】搭配Miniconda使用VSCode
现在的spyder总是运行出错,启动不了,尝试使用VSCode。 一、在VSCode中使用Miniconda管理的Python环境,可以按照以下步骤进行: a. 确保Miniconda环境已经安装并且正确配置。 b. 打开VSCode,安装Python扩展。 打开VS…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
