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

React入门

一、react开始

1、react是什么

用于构建用户界面的JavaScript库
操作DOM呈现页面
(发送请求获取数据和处理数据不由react处理)fessbook开发

2、为什么要学

原生js操作DOM繁琐、效率低
使用原生js直接操作DOM,浏览器会进行大量重绘重排
原生js没有组件化编码方案,代码复用率低

3、react特点

采用组件化模式,声明式编码,提高开发效率及组件复用率
在React Native中可以使用react语法进行移动端开发
使用虚拟DOM+优秀的Diffing算法,尽量减少与真实DOM的交互

4、JScript基础

判断this指向
class(类)
ES6语法规范
npm包管理器
原型、原型链
数组常用方法
模块化

二、使用

1、引入下列三个js

react.development.js
react-dom.development.js
babel.min.js

2、创建DOM

js方式创建虚拟DOM:
React.createElement(标签名,标签属性,标签内容)创建虚拟DOM
document.createElement()创建真实DOM
jsx更简洁

3、虚拟DOM

本质是object类型的对象(一般对象)
虚拟DOM属性少,真实DOM属性多,因为虚拟DOM是react内部在用,无需真实DOM上的那么多属性
虚拟DOM最终会被react转化为真实DOM,呈现在页面上

4、jsx

js+xml,属于JScript的扩展
定义虚拟DOM不写引号
标签中混入js表达式要用{}
样式的类名指定不用class用className
内联样式,用style={{key:value}}
只有一个根标签
标签必须闭合

5、组件

函数式组件首字母大写
类式组件
类中的构造器非必写,

6、组件实例的三大核心属性

state(状态):状态不可直接更改,须用setState()更新
render中的this为组件实例对象
props:组件外传值与批量传值
可以加属性规则
函数式组件只能使用props属性,除非使用hooks
refs:类似原生的元素id,refs为一组ref值;
字符串形式的ref存在效率问题,已经弃用;
回调函数形式的ref,(如果内置函数则执行两次,第一次为null)
createRef用多少创建多少

7、react事件处理

8、收集表单数据

受控组件与非受控组件

9、高阶函数–函数柯里化

10、组件的生命周期

常用的生命周期函数
didMount
render
willUnmount
新版生命周期新增的两个生命周期:
getDerivedStateFromProps()、getSnapshotBeforeUpdate()

11、DOM的Diff算法

虚拟DOM中唯一标识key的作用
破坏顺序时可能错位,引起效率问题,可使用id等唯一值代替

12、react脚手架

借助webpack
react+webpack+es6+eslint
模块化、组件化、工程化

13、样式的模块化

14、组件化编码

拆分组件
实现静态组件
实现动态组件(初始化数据,交互)

15、组件传值

父传子:props
子传父:父组件先用props传函数给子组件,接着子组件调此函数传值給父组件即可
状态state在哪里,操作state的方法就在哪

16、react ajax

建议使用轻量级axios,已经封装xmlhttprequest
使用ajax会产生跨域,需要代理解决(package.json文件配置单个proxy)
配置多个代理在SRC根文件新建setupProxy.js(http-proxy-middleware)

17、兄弟(或任意)组件传值

消息订阅-发布机制(PubSubjs)
先订阅,再发布
需要在componentWillUnmount中取消订阅

18、发送请求方式

xhr:设计粗糙的API,不符合关注分离原则
fetch:原生函数,有的老版本浏览器不支持,不常用

19、单页面应用SPA(路由)

20、前端路由

BOM(history)HTML5新增的historyAPI

21、react路由(react-router-dom)

①一级路由
link
NvLink(通过this.prps.children可以拿到标签体内容)
Switch单一匹配,path与component一一对应
②路由的精准匹配和模糊匹配
Redirect Redirect重定向(最下方)
二级路由(嵌套路由)
③子级路由需要加父级路由path

向路由组件传递参数

④向路由组件传递params参数(声明,接收,在props取)this.props.location.params
⑤向路由组件传递search参数(不用声明,正常注册路由,在props取,最后借助querystring解析)this.props.location
⑥向路由组件传递state参数(不用声明,正常注册路由(路由对象),在props取)this.props.location.state
路由栈的push(默认)与replace(按需开启)模式

编程式路由

利用this.props.history对象里的API前进回退
withRouter可以加工一般组件加,让其拥有路由组件所具有的API

BrowserRouter与HashRouter

底层原理:
BrowserRouter封装了HTML5提供的historyAPI
HashRouter使用的是URL的哈希值
path:
BrowserRouter不带#;HashRouter带了#
刷新后对路由state的影响:
BrowserRouter不影响,state保存在history对象中;
HashRouter刷新后会导致路由state参数丢失

22、UI(antd)

ANT-Design

三、redux

专门用于状态管理的js库
集中式管理多个组件共享的状态
在这里插入图片描述
同步action:object一般对象
异步action:function函数,即action的返回值为函数(需要引入redux-thunk支持异步action),一般异步action中会调用同步action
在这里插入图片描述

react-redux

在这里插入图片描述
优化
在这里插入图片描述

在这里插入图片描述

相关文章:

React入门

一、react开始 1、react是什么 用于构建用户界面的JavaScript库 操作DOM呈现页面 (发送请求获取数据和处理数据不由react处理)fessbook开发 2、为什么要学 原生js操作DOM繁琐、效率低 使用原生js直接操作DOM,浏览器会进行大量重绘重排 原…...

第三方登录以及验证

第三方登录是指用户可以通过使用已有的第三方账号进行登录,而无需再次注册新的账号。常见的第三方登录平台包括微信、QQ、微博、GitHub等。 验证是指系统需要验证用户提供的信息是否正确,以确保用户可以登录系统。验证方式包括密码验证、手机号验证、邮…...

MS SQL Server问题汇总

1.报SQL Server Agent连接不上的错误 15:38:57.991 [debezium-sqlserverconnector-sqlserver_transaction_log_source-change-event-source-coordinator] WARN i.d.connector.sqlserver.SqlServerStreamingChangeEventSource - No maximum LSN recorded in the database; pl…...

在线海报图片设计器、图片编辑器源码/仿照稿定设计源码

在线海报设计系统素材设计源码是一个漂亮且功能强大的在线海报图片设计器,仿照稿定设计而成。该系统适用于多种场景,包括海报图片生成、电商分享图、文章长图、视频/公众号封面等。用户无需下载软件,即可轻松实现创意,迅速完成排版…...

KMP算法(C++)

KMP算法与BF算法不一样的在于,当主串与子串不匹配时,主串不回溯,选择了子串回溯,大大提高了运算效率。 借用了next1【】数组,让子串回溯。get_next函数求next1【】数组,get_next函数的实现难点在于下列几行…...

C++的异常类型与多级catch匹配

try-catch 的用法: try{// 可能抛出异常的语句 }catch(exceptionType variable){// 处理异常的语句 } 我们还遗留下一个问题,就是 catch 关键字后边的exceptionType variable,这节就来详细分析一下。exceptionType是异常类型,它指明了当前的 catch 可以处理什么类型的异常…...

查询IP地址可得到哪些信息

通过IP地址定位,可以获取一些基本的信息,包括以下内容: 1. 地理位置:你可以确定IP地址所在的地理位置,包括国家、州或省、城市和地理坐标。这通常是通过将IP地址与地理位置数据库进行匹配来实现的。 2. ISP&#xff…...

考研算法47天:01背包

问题描述 算法详细步骤 代码随想录 (programmercarl.com) ac代码 #include <iostream> using namespace std; int bag[1001]; int bagMax[1001]; int bagvalue[1001]; int main(){int n,v;cin>>n>>v;for(int i0;i<n;i){cin>>bag[i]>>bagva…...

Docker实战技巧(一):Kubernetes基础操作实战

Kubernetes定位在Saas层,重点解决了微服务大规模部署时的服务编排问题 1、关闭防火墙并设置开机禁用   systemctl stop firewalld   systemctl disable firewalld 2、配置repo   cd /etc/yum.repos.d/   下载Docker repo   wget https://mirrors.aliyun.com/docker-…...

android java读写yaml文件

目录 申请读写权限&#xff1a; build.gradle中添加库引用&#xff1a; android java读写yaml文件 java修改yaml文件 YamlFile&#xff1a; 修改yaml文件方法2 Yaml&#xff1a; 删除值&#xff1a; 申请读写权限&#xff1a; <uses-permission android:name"and…...

科学计算器网站Desmos网站

科学计算器网站Desmos网站 有时在学习工作或者生活中&#xff0c;需要用到计算问题&#xff0c;但由于电脑上没有安装相应的专业软件&#xff0c;难以计算有的问题&#xff0c;因而&#xff0c;本文推荐一种免费的在线计算网站Desmos。 一、Desmos网址 Desmos官网的地址为&a…...

结构体-时间的计算

任务描述 本关任务需要你编写函数计算一个时间之前“xx小时xx分xx秒”的时间是多少。 以24小时制的格式记录当前时间&#xff0c;譬如“09:19:52”&#xff0c;表示上午9点19分52秒&#xff0c;则“1小时20分30秒”前的时间应该是“同一天”的“07:59:22”。 提示&#xff1a;…...

pt24django教程

静态文件访问 不能与服务器端做动态交互的文件都是静态文件&#xff0c;如: 图片,css,js,音频,视频,html文件(部分) 静态文件配置 在 settings.py 中配置一下两项内容: STATIC_URL 静态文件的访问路径&#xff0c;通过哪个url地址找静态文件 &#xff0c;STATIC_URL ‘/s…...

Golang开发-new关键字

在Go语言中&#xff0c;new关键字用于创建一个新的零值对象&#xff0c;并返回指向该对象的指针。它是Go语言中用于分配内存的一种方式。 new关键字的语法如下&#xff1a; ptr : new(Type)其中&#xff0c;Type表示要创建的对象的类型&#xff0c;ptr是指向新对象的指针。 …...

遗传算法与粒子群算法的Python实现

遗传算法本文应用的是 python geatpy module粒子群算法本文应用的是 python pyswarm module 遗传算法 它的不等约束是...<0 import geatpy as ea import numpy as npea.Problem.single def evalVars(Vars): x1 Vars[0]x2 Vars[1]x3 Vars[2]x4 Vars[3]f (x1 2)**2 \…...

无涯教程-JavaScript - ASINH函数

描述 ASINH函数返回数字的反双曲正弦值。反双曲正弦是其双曲正弦为number的值,即ASINH(SINH(number))等于number。 语法 ASINH (number)争论 Argument描述Required/OptionalNumberAny real number.Required Notes 如果指定的数字未被识别为数字值,则ASIN返回#VALUE!错误 …...

ActiveMQ面试题(一)

文章目录 前言一、什么是ActiveMQ二、ActiveMQ 服务器宕机怎么办&#xff1f;三、丢消息怎么办四、持节化消息非常慢五、消息的不均匀消费总结 前言 什么是ActiveMQActiveMQ 服务器宕机怎么办&#xff1f;丢消息怎么办持节化消息非常慢消息的不均匀消费 一、什么是ActiveMQ a…...

node:glob语法以及常用的文件查找库glob、fast-glob

背景 前端开发中&#xff0c;我们经常会看到一种配置语法&#xff0c;一般出现在 gitignore里、webpack 配置里、vscode查找文件的时候&#xff0c;如下&#xff1a; ?.js **/*.js dist/**/*.js这种语法其实叫 glob。 glob 历史 glob 来自于 Linux。 1975 年发行的 unix …...

饲料添加剂 微生物 屎肠球菌

声明 本文是学习GB 7300.503-2023 饲料添加剂 第5部分&#xff1a;微生物 屎肠球菌. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了饲料添加剂屎肠球菌的技术要求、采样、检验规则、标签、包装、运输、贮存和保质 期&#xff0…...

二叉搜索树经典笔试题【力扣、牛客】

文章目录 1.根据二叉树创建字符串2. 二叉树的层序遍历3.二叉树的层序遍历Ⅱ4.二叉树的最近公共祖先1.法一&#xff1a;定位p、q在左还是右 分类讨论2.法二&#xff1a;利用stack求出p、q路径 求相交值 5.二叉搜索树与双向链表1.法一&#xff1a;递归&#xff1a;递归过程修正指…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...

Unity VR/MR开发-VR开发与传统3D开发的差异

视频讲解链接&#xff1a;【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)

错误一&#xff1a;yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因&#xff0c;后面把yaml.safe_dump直接替换成yaml.dump&#xff0c;确实能保存&#xff0c;但出现乱码&#xff1a; 放弃yaml.dump&#xff0c;又切…...