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

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 组件库,用于研发企业级中后台产品。icon-default.png?t=N7T8https://ant.design/index-cn

开发框架

Next.js - React 应用开发框架 | Next.js中文网Next.js 支持规模化的生产级 React 应用程序。大量世界领先的公司都在使用 Next.js 来构建静态和动态网站及 web 应用。icon-default.png?t=N7T8https://www.nextjs.cn/

官网详细文档

快速入门 – React 中文文档icon-default.png?t=N7T8https://react.docschina.org/learn

相关文章:

react基础入门

1&#xff0c;了解react react并不是一个MVC框架&#xff0c;他只是一个很强大的javaScript库&#xff0c;主要作用是用来构建UI界面。 react的核心是封装一个个大大小小的组件&#xff08;小到一个按钮&#xff0c;大到一个页面&#xff09;来构建复杂的UI界面&#xff0c;每…...

spring boot学习第八篇:通过spring boot、jedis实现秒单

参考&#xff1a;Redis实现分布式锁的7种方案 - 知乎 1、 准备数据库表&#xff0c;如下SQL表示库存表&#xff0c;有主键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

前言 随着信息技术的发展&#xff0c;监控服务在维护系统稳定性和性能方面变得越来越重要。本文将比较一些流行的开源监控服务&#xff0c;以帮助你选择适合你需求的解决方案。 监控服务对比 监控服务特点优势不足性能扩展性安全性Prometheus- 多维度数据模型- 监控容器化环…...

使用WAF防御网络上的隐蔽威胁之扫描器

在网络安全领域&#xff0c;扫描器是用于侦察和识别网络系统漏洞的工具。 它们可以帮助网络管理员识别安全漏洞&#xff0c;也可能被攻击者用来寻找攻击目标。 扫描器的基本概念 定义&#xff1a;扫描器是一种自动化工具&#xff0c;用于探测网络和服务器中的漏洞、开放端口、…...

企业信息安全管理制度

随着信息化程度的日益推进&#xff0c;企业信息的脆弱性也日益暴露。如何规范日趋复杂的信息安全保障体系建设&#xff0c;如何进行信息风险评估保护企业的信息资产不受侵害&#xff0c;已成为当前行业实现信息化运作亟待解决的问题。 一、企业的信息及其安全隐患 在我公司&am…...

Qt中的线程池

Qt中的线程池 目录 1 为什么需要线程池 2 Qt中有哪些方式实现线程池 3 如何通过QThreadPool类实现线程池 4 如何通过QtConcurrent库实现线程池 5 如何通过自定义的方式实现线程池 5 小结 1 为什么需要线程池 线程池是多线程编程中常用的一种技术&#xff0c;可以帮助管理系统中…...

使用Spring Boot集成中间件:Elasticsearch基础->提高篇

使用Spring Boot集成中间件&#xff1a;Elasticsearch基础->提高篇 导言 Elasticsearch是一个开源的分布式搜索和分析引擎&#xff0c;广泛用于构建实时的搜索和分析应用。在本篇博客中&#xff0c;我们将深入讲解如何使用Spring Boot集成Elasticsearch&#xff0c;实现数…...

【Docker】Dockerfile构建最小镜像

&#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Docker的相关操作吧 目录 &#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 前言 一.Dockerfile是什么 二.Dock…...

【严重】GitLab 以其他用户身份执行 Slack 命令

漏洞描述 GitLab 是由GitLab公司开发的、基于Git的集成软件开发平台。使用 Slack 命令在 Slack 聊天环境中运行常见的 GitLab 操作。 GitLab 受影响版本中&#xff0c;由于配置Slack/Mattermost 集成时&#xff0c;未正确验证用户身份信息&#xff0c;导致攻击者可以使用其他…...

【卡梅德生物】纳米抗体文库构建

纳米抗体文库构建服务是一项提供定制化纳米抗体文库的服务&#xff0c;旨在满足研究者和生物制药公司对高质量抗体的需求。这项服务通常包括以下主要步骤&#xff1a; 1.抗原设计和制备&#xff1a; -客户提供目标抗原信息&#xff0c;或由服务提供商协助设计抗原。 -抗原制…...

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开发入门】

计算机基本概念 计算机组成原理 计算机组装 计算机&#xff1a;电子计算机&#xff0c;俗称电脑。是一种能够按照程序运行&#xff0c;自动、高速处理海量数据的现代化智能电子设备。由硬件和软件所组成&#xff0c;没有安装任何软件的计算机称为裸机。常见的形式有台式计算机、…...

ARM day1

一、概念 ARM可以工作的七种模式用户、系统、快中断、中断、管理、终止、未定义ARM核的寄存器个数 37个32位长的寄存器&#xff0c;当前处理器的模式决定着哪组寄存器可操作&#xff0c;且任何模式都可以存取&#xff1a; PC(program counter程序计数器) CPSR(current program…...

ImageNet Classification with Deep Convolutional 论文笔记

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…...

Spring Boot中加@Async和不加@Async有什么区别?设置核心线程数、设置最大线程数、设置队列容量是什么意思?直接在yml中配置线程池

在 Spring 中&#xff0c;Async 注解用于将方法标记为异步执行的方法。当使用 Async 注解时&#xff0c;该方法将在单独的线程中执行&#xff0c;而不会阻塞当前线程。这使得方法可以在后台执行&#xff0c;而不会影响主线程的执行。 在您提供的代码示例中&#xff0c;a1() 和…...

自动化理论基础(2)—开发语言之Python

一、知识汇总 掌握 Python 编程语言需要具备一定的基础知识和技能&#xff0c;特别是对于从事自动化测试等领域的工程师。以下是掌握 Python 的一些关键方面&#xff1a; 基本语法&#xff1a; 理解 Python 的基本语法&#xff0c;包括变量、数据类型、运算符、条件语句、循环…...

Spark算子(RDD)超细致讲解

SPARK算子&#xff08;RDD&#xff09;超细致讲解 map,flatmap,sortBykey, reduceBykey,groupBykey,Mapvalues,filter,distinct,sortBy,groupBy共10个转换算子 &#xff08;一&#xff09;转换算子 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总是运行出错&#xff0c;启动不了&#xff0c;尝试使用VSCode。 一、在VSCode中使用Miniconda管理的Python环境&#xff0c;可以按照以下步骤进行&#xff1a; a. 确保Miniconda环境已经安装并且正确配置。 b. 打开VSCode&#xff0c;安装Python扩展。 打开VS…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

【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 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...