React 全栈体系(一)
第一章 React入门
一、React简介
1. 是什么?
- 是一个将数据渲染为HTML视图的开源JavaScript库。
2. 谁开发的?
- 由Facebook开源
3. 为什么要学?
-
原生JavaScript操作DOM繁琐,效率低(DOM-API 操作 UI)
-
使用JavaScript直接操作DOM,浏览器会进行大量的重绘重排
-
原生JS没有组件化编码方案,代码复用低
4. React的特点
- 采用组件化模式,声明式编码,提高开发效率及组件复用率
- 在React Native中可以使用React语法进行移动端开发
- 使用虚拟DOM+优秀的Diffing算法,尽量减少与真实DOM的交互



5. React高效的原因
- 使用虚拟(virtual)DOM, 不总是直接操作页面真实DOM。
- DOM Diffing算法, 最小化页面重绘。
二、React的基本使用
1. 效果

2. 相关js库
- react.js:React核心库。
- react-dom.js:提供操作DOM的react扩展库。
- babel.min.js:解析JSX语法代码转为JS代码的库。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>hello_react</title>
</head>
<body><!-- 准备好一个“容器” --><div id="test"></div><!-- 引入react核心库 --><script type="text/javascript" src="../js/react.development.js"></script><!-- 引入react-dom,用于支持react操作DOM --><script type="text/javascript" src="../js/react-dom.development.js"></script><!-- 引入babel,用于将jsx转为js --><script type="text/javascript" src="../js/babel.min.js"></script><script type="text/babel" > /* 此处一定要写babel *///1.创建虚拟DOMconst VDOM = <h1>Hello,React</h1> /* 此处一定不要写引号,因为不是字符串 *///2.渲染虚拟DOM到页面ReactDOM.render(VDOM,document.getElementById('test'))</script>
</body>
</html>
3. 创建虚拟DOM的两种方式

- 纯JS方式(一般不用)
- JSX方式
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>1_使用jsx创建虚拟DOM</title>
</head>
<body><!-- 准备好一个“容器” --><div id="test"></div><!-- 引入react核心库 --><script type="text/javascript" src="../js/react.development.js"></script><!-- 引入react-dom,用于支持react操作DOM --><script type="text/javascript" src="../js/react-dom.development.js"></script><!-- 引入babel,用于将jsx转为js --><script type="text/javascript" src="../js/babel.min.js"></script><script type="text/babel" > /* 此处一定要写babel *///1.创建虚拟DOMconst VDOM = ( /* 此处一定不要写引号,因为不是字符串 */<h1 id="title"><span>Hello,React</span></h1>)//2.渲染虚拟DOM到页面ReactDOM.render(VDOM,document.getElementById('test'))</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>2_使用js创建虚拟DOM</title>
</head>
<body><!-- 准备好一个“容器” --><div id="test"></div><!-- 引入react核心库 --><script type="text/javascript" src="../js/react.development.js"></script><!-- 引入react-dom,用于支持react操作DOM --><script type="text/javascript" src="../js/react-dom.development.js"></script><script type="text/javascript" > //1.创建虚拟DOMconst VDOM = React.createElement('h1',{id:'title'},React.createElement('span',{},'Hello,React'))//2.渲染虚拟DOM到页面ReactDOM.render(VDOM,document.getElementById('test'))</script>
</body>
</html>
4. 虚拟DOM与真实DOM
4.1 React提供了一些API来创建一种 “特别” 的一般js对象
- const VDOM = React.createElement(‘xx’,{id:‘xx’},‘xx’)
- 上面创建的就是一个简单的虚拟DOM对象
4.2 虚拟DOM对象最终都会被React转换为真实的DOM
4.3 我们编码时基本只需要操作react的虚拟DOM相关数据, react会转换为真实DOM变化而更新界面。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>3_虚拟DOM与真实DOM</title>
</head>
<body><!-- 准备好一个“容器” --><div id="test"></div><div id="demo"></div><!-- 引入react核心库 --><script type="text/javascript" src="../js/react.development.js"></script><!-- 引入react-dom,用于支持react操作DOM --><script type="text/javascript" src="../js/react-dom.development.js"></script><!-- 引入babel,用于将jsx转为js --><script type="text/javascript" src="../js/babel.min.js"></script><script type="text/babel" > /* 此处一定要写babel *///1.创建虚拟DOMconst VDOM = ( /* 此处一定不要写引号,因为不是字符串 */<h1 id="title"><span>Hello,React</span></h1>)//2.渲染虚拟DOM到页面ReactDOM.render(VDOM,document.getElementById('test'))const TDOM = document.getElementById('demo')console.log('虚拟DOM',VDOM);console.log('真实DOM',TDOM);debugger;// console.log(typeof VDOM);// console.log(VDOM instanceof Object);/* 关于虚拟DOM:1.本质是Object类型的对象(一般对象)2.虚拟DOM比较“轻”,真实DOM比较“重”,因为虚拟DOM是React内部在用,无需真实DOM上那么多的属性。3.虚拟DOM最终会被React转化为真实DOM,呈现在页面上。*/</script>
</body>
</html>
三、React JSX
1. 效果

2. JSX
- 全称: JavaScript XML
- react定义的一种类似于XML的JS扩展语法: JS + XML本质是React.createElement(component, props, …children)方法的语法糖
- 作用: 用来简化创建虚拟DOM
- 写法:var ele = <h1>Hello JSX!</h1>
- 注意1:它不是字符串, 也不是HTML/XML标签
- 注意2:它最终产生的就是一个JS对象
- 标签名任意: HTML标签或其它标签
- 标签属性任意: HTML标签属性或其它
- 基本语法规则
- 遇到 <开头的代码, 以标签的语法解析: html同名标签转换为html同名元素, 其它标签需要特别解析
- 遇到以 { 开头的代码,以JS语法解析: 标签中的js表达式必须用{ }包含
- babel.js的作用
- 浏览器不能直接解析JSX代码, 需要babel转译为纯JS的代码才能运行
- 只要用了JSX,都要加上type=“text/babel”, 声明需要babel来处理
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>jsx语法规则</title><style>.title{background-color: orange;width: 200px;}</style>
</head>
<body><!-- 准备好一个“容器” --><div id="test"></div><!-- 引入react核心库 --><script type="text/javascript" src="../js/react.development.js"></script><!-- 引入react-dom,用于支持react操作DOM --><script type="text/javascript" src="../js/react-dom.development.js"></script><!-- 引入babel,用于将jsx转为js --><script type="text/javascript" src="../js/babel.min.js"></script><script type="text/babel" >const myId = 'aLeX'const myData = 'HeLlo,rEaCt'//1.创建虚拟DOMconst VDOM = (<div><h2 className="title" id={myId.toLowerCase()}><span style={{color:'white',fontSize:'29px'}}>{myData.toLowerCase()}</span></h2><h2 className="title" id={myId.toUpperCase()}><span style={{color:'white',fontSize:'29px'}}>{myData.toLowerCase()}</span></h2><input type="text"/></div>)//2.渲染虚拟DOM到页面ReactDOM.render(VDOM,document.getElementById('test'))/* jsx语法规则:1.定义虚拟DOM时,不要写引号。2.标签中混入JS表达式时要用{}。3.样式的类名指定不要用class,要用className。4.内联样式,要用style={{key:value}}的形式去写。5.只有一个根标签6.标签必须闭合7.标签首字母(1).若小写字母开头,则将该标签转为html中同名元素,若html中无该标签对应的同名元素,则报错。(2).若大写字母开头,react就去渲染对应的组件,若组件没有定义,则报错。*/</script>
</body>
</html>

3. 渲染虚拟DOM(元素)
- 语法: ReactDOM.render(virtualDOM, containerDOM)
- 作用: 将虚拟DOM元素渲染到页面中的真实容器DOM中显示
- 参数说明
- 参数一: 纯js或jsx创建的虚拟dom对象
- 参数二: 用来包含虚拟DOM元素的真实dom元素对象(一般是一个div)
4. JSX练习
- 需求: 动态展示如下列表
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>jsx小练习</title>
</head>
<body><!-- 准备好一个“容器” --><div id="test"></div><!-- 引入react核心库 --><script type="text/javascript" src="../js/react.development.js"></script><!-- 引入react-dom,用于支持react操作DOM --><script type="text/javascript" src="../js/react-dom.development.js"></script><!-- 引入babel,用于将jsx转为js --><script type="text/javascript" src="../js/babel.min.js"></script><script type="text/babel" >/* 一定注意区分:【js语句(代码)】与【js表达式】1.表达式:一个表达式会产生一个值,可以放在任何一个需要值的地方下面这些都是表达式:(1). a(2). a+b(3). demo(1)(4). arr.map() (5). function test () {}2.语句(代码):下面这些都是语句(代码):(1).if(){}(2).for(){}(3).switch(){case:xxxx}*///模拟一些数据const data = ['Angular','React','Vue']//1.创建虚拟DOMconst VDOM = (<div><h1>前端js框架列表</h1><ul>{data.map((item,index)=>{return <li key={index}>{item}</li>})}</ul></div>)//2.渲染虚拟DOM到页面ReactDOM.render(VDOM,document.getElementById('test'))</script>
</body>
</html>

四、模块与组件、模块化与组件化的理解
1.模块
- 理解:向外提供特定功能的js程序, 一般就是一个js文件
- 为什么要拆成模块:随着业务逻辑增加,代码越来越多且复杂
- 作用:复用js, 简化js的编写, 提高js运行效率
2. 组件
- 理解:用来实现局部功能效果的代码和资源的集合(html/css/js/image等等)
- 为什么要用组件: 一个界面的功能更复杂
- 作用:复用编码, 简化项目编码, 提高运行效率
3. 模块化
当应用的js都以模块来编写的, 这个应用就是一个模块化的应用
4. 组件化
当应用是以多组件的方式实现, 这个应用就是一个组件化的应用

相关文章:
React 全栈体系(一)
第一章 React入门 一、React简介 1. 是什么? 是一个将数据渲染为HTML视图的开源JavaScript库。 2. 谁开发的? 由Facebook开源 3. 为什么要学? 原生JavaScript操作DOM繁琐,效率低(DOM-API 操作 UI) 使…...
SpringBoot代理访问本地静态资源400 404
SpringBoot代理访问静态资源400 404 背景:pdf文件上传到linux服务器上,使用SpringBoot代理访问问题:访问过程中可能会出现400、404问题 前提:保证有文件,并且文件路径正确 SpringBoot如何配置静态资源代理࿰…...
Java导出数据到Excel
系列文章目录 文章目录 系列文章目录前言一、为什么需要导出数据到Excel?二、使用Java导出数据到Excel的步骤1.添加依赖2.编写导出逻辑3.运行测试总结前言 当今数据处理的场景中,Excel仍然是一个不可或缺的工具,用于存储、分析和共享数据。在Java应用程序中,有时候需要将数…...
IDEA常用设置与maven项目部署
目录 前言 一、Idea是什么 二、Idea的优点 三、Idea的常用设置 主题设置 设置鼠标悬浮提示 忽略大小写提示 自动导包 取消单行显示Tabs 设置字体 配置类文档注释信息模版 设置文件编码 设置自动编译 水平或者垂直显示代码 快捷方式改成eclipse 设置默认浏览器…...
想学好网络技术,这一张纸就够了
大家好,我是老杨。 马上又到一年一度的大学新生入学季,今年更多家长都给孩子们报了计算机相关专业。 要知道啊,这个计算机专业包含的方向贼多,什么网络工程、软件工程、信息安全、物联网工程、传感网技术、通信工程与电子信息之…...
list的使用和模拟实现
目录 1.list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 2.为什么使用迭代器? 3.list的模拟实现 3.1完整代码 3.2代码解析 4.list与…...
Kubernetes 部署DolphinScheduler 创建租户失败
创建租户 报错创建租户失败。后台日志如下 源代码跟踪 org.apache.dolphinscheduler.api.service.impl.TenantServiceImpl / if hdfs startup if (PropertyUtils.getResUploadStartupState()) {createTenantDirIfNotExists(tenantCode); }需要将 resource.storage.type 置为…...
uniapp 获取 view 的宽度、高度以及上下左右左边界位置
<view class"cont-box"></view> /* 获取节点信息的对象 */ getElementRect() {const query uni.createSelectorQuery().in(this);query.select(".cont-box").boundingClientRect(res > {console.log(res);console.log(res.height); // 10…...
财务数据分析之现金流量表模板分享
现金流量表是我们常说的财务数据分析三表之一。它可以呈现一个企业的现金流情况,揭示企业经营管理健康状态,但在实际使用中却有总给人一种用不上、用不好的矛盾感。怎么才能把现金流量表做好?不如借鉴下大神的现金流量表模板。 下面介绍的是…...
日常BUG——通过命令行创建vue项目报错
😜作 者:是江迪呀✒️本文关键词:日常BUG、BUG、问题分析☀️每日 一言 :存在错误说明你在进步! 一、问题描述 在使用vue命令行创建一个vue项目时,出现一下的错误: vue create my…...
CSS3 新特性
圆角阴影文字阴影线性渐变变换(transform)背景rgba伪元素:伪类 伪元素区别动画(animate)...
微信记录---推荐系统---23/8/14 小总结
推荐系统---23/8/14 小总结 1. ACM推荐系统专题研讨会2.图神经网络推荐系统3.表1 模型效果对标:MovieLens 1M4.爬虫技术5.TF-IDF算法6.图 2 海量学术大数据推荐系统技术架构7.图 4 CADAL 平台推荐系统框架设计8.企业推荐系统发展概述MLR(Mixed Logistic Regression)DIEN(Deep…...
学习笔记整理-正则表达式-01-认识正则
一、基本认识 1. 什么是正则表达式 正则表达式(regular expression)描述了字符串"构成模式",经常被用于检查字符串是否符合预定的格式要求。 用一个例子快速演示正则表达式基本使用方法:检查某个字符串是否是6位数字 // 要检查的字符串va…...
windows10/11 修改docker镜像存储目录
windows10/11 修改docker镜像存储目录 windows10/11 修改docker镜像存储目录查看docker的状态关闭所有正在运行的实例导出WSL子系统镜像注销现有的wsl重新创建wsl系统 windows10/11 修改docker镜像存储目录 docker默认pull的镜像在c盘,随着镜像的增加,C…...
AI黑马挑战赛,探索研发新趋势丨IDCF
随着AI的出现,获取知识的成本大幅降低,当DevOps与AI相结合时,必将产生全新的化学反应。不断涌现的AI新工具提醒我们,一个全新的研发工作范式正在逐渐形成。而DevOps的核心理念是敏捷协同,作为工程师,如何通…...
关于onload事件
onload事件是在网页中的所有内容(包括图片、样式表、脚本等)都加载完成后触发的事件。它常用于在页面加载完成后执行一些操作,例如初始化页面元素、绑定事件监听器等。 可以通过以下方式来使用onload事件: 在HTML标签中直接添加…...
合并单元格
需求: 合并 相同名称的产品 先说下elementUI合并单元格的方法,先计算好要合并的行数rowspan,return {rowspan,colspan},其他的单元格return{0,0} getData(params) {//临时数组,存放产品名称相同的数量this…...
Spring Boot @Validated 验证注解的使用
1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency> 2、使用 2.1、非对象参数 参数如果是非对象格式,需要在controller类上面添…...
如何理解“对矩阵进行初等行变换不改变其列向量的线性关系”?
对矩阵A进行初等行变换相当于左乘一个可逆矩阵P。 把A看作是列向量组,若有Ax0,则其中的x就说明了列向量的线性关系: [ α 1 , α 2 , α 3 ] [ x 1 x 2 x 3 ] [ 0 ] \left[ \alpha_1 ,\alpha_2, \alpha_3 \right] \begin{bmatrix} x_1\\ x…...
书店行业小程序开发攻略
随着移动互联网的快速发展,小程序成为了各行各业的热门选择,包括书店行业。书店小程序的开发可以为书店提供在线销售渠道,提高销售额,增强用户粘性。本文将介绍如何从搭建到上线开发一款书店行业小程序。 首先,我们需要…...
AArch64架构下非缓存内存的指令缓存机制解析
1. AArch64架构下非缓存正常内存的指令缓存机制解析在Armv8-A和Armv9-A架构的AArch64执行状态下,关于指令缓存(Instruction Cache)如何处理非缓存(Non-cacheable)内存区域的指令访问,存在一个值得深入探讨的技术细节。这个问题直接关系到处理器对内存访问…...
如何用OpenSpeedy实现单机游戏5倍速运行:完整免费加速教程
如何用OpenSpeedy实现单机游戏5倍速运行:完整免费加速教程 【免费下载链接】OpenSpeedy 🎮 An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy 还在为游戏卡顿和漫长的等待时间烦恼吗?Ope…...
用Python复现论文里的CDSM融合:从NuScenes数据预处理到3D检测模型训练全流程
用Python复现论文里的CDSM融合:从NuScenes数据预处理到3D检测模型训练全流程自动驾驶感知系统的核心挑战在于如何有效融合多模态传感器数据。本文将手把手带你实现论文《CDSM: Cross-Domain Spatial Matching for Camera-Radar Fusion in 3D Object Detection》的核…...
为什么有些论文,答辩老师越听越不敢卡?
很多学生都经历过一种很明显的反差。有些同学一进答辩室, 老师状态特别紧。问题一个接一个; 追问不断; 语气越来越严肃。但还有一种情况。有些同学刚讲几分钟, 现场气氛就明显变了。老师开始点头; 追问越来越少&#x…...
自动化业务通报系统实现
问题解构:需求核心是构建一个基于Python的自动化业务通报系统,用于从多个.xls报表中提取数据,按团队统计指标完成情况,生成手机适配的通报图片,并通过Web界面展示。系统需支持灵活的配置管理,包括团队信息、…...
【应用实战】基于Dify与多Agent的凭证与档案管理
一、智能文档处理:基于Dify与多Agent的凭证与档案管理革新 在金融行业,文档处理贯穿业务始终。传统的纯人工方式不仅耗时费力,而且极易出错。智能文档处理(Intelligent Document Processing, IDP)融合了OCR、自然语言处…...
SpringBoot+Vue旅游管理系统源码+论文
代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择: 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…...
211本科985硕拿下淘天AI二面!全程无代码,这面试题火了!
本文分享了作者在淘天AI应用开发二面中的面试经历,全程不到60分钟,没有手撕代码,也没有问常规Java八股。面试主要围绕自我介绍、AI相关问题、工程与安全问题、项目提问以及反问环节展开。AI相关问题涉及对AI的看法、常用AI工具等;…...
【AI入门知识点】Harness 是什么?为什么 DeepSeek 要组建 Harness 团队?
最近,DeepSeek 招聘信息中出现了一个越来越高频的关键词——Harness 团队。 很多人第一反应是: Harness 是什么?一种新模型?还是某个框架?为什么 DeepSeek 专门成立团队来做这个?如果你第一次听到这个词&am…...
工业AI落地:从数据冷启动到高质数据工程实战
1. 为什么“数据为中心”不是口号,而是工程现场的真实压力去年冬天,我帮一家做工业缺陷检测的初创公司做模型交付。他们拿来的数据集只有237张标注图,全是产线停机时人工拍的——光照不均、角度单一、连螺丝孔都只拍正面。当时团队信心满满&a…...
