React入门

news2024/10/7 2:26:53

一、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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1015275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机视觉面试题整理

1、介绍目标检测网络yolo系列以及ssd系列的原理,yolo对小目标检测不好的原因,除了缩小anchor外还可以如何改善? Yolo目标检测:YOLO是一种实时目标检测算法,其核心思想是将目标检测问题归为一个回归问题,直…

Android毕业设计,基于Android 语音朗读书籍管理系统

视频演示: 基于Android 语音朗读书籍管理系统 基于 Android 的语音朗读书籍管理系统可以提供用户管理书籍、朗读书籍的功能。以下是一个简单的步骤和功能列表: 用户注册和登录功能: 用户可以注册新账号或使用现有账号登录系统。用户信息可以包…

【rust/egui】(十一)使用rfd选择文件并使用serde_json进行序列化

说在前面 rust新手,egui没啥找到啥教程,这里自己记录下学习过程环境:windows11 22H2rust版本:rustc 1.71.1egui版本:0.22.0eframe版本:0.22.0上一篇:这里 rfd-Rusty File Dialogs 一个跨平台的…

只需3步部署Django项目到Kubernetes上

1. 目标 本文讲述了如何通过3步,把Django项目部署在K8S上。 本文适用读者: 了解Django项目的开发。了解K8S的用途。 2. 具体步骤 把一个Django项目部署在Kubernete环境上,只需以下3步: 创建镜像部署在Kubernetes环境上配置MyS…

linux命令查看谁在使用服务器的GPU

命令:查看GPU使用情况 nvidia-smi 可以知悉GPU占用情况和主要使用GPU的进程,如下图所示: 实时查看gpu使用: nvidia-smi -l 1 表示每隔1s刷新一下,数字可更改。 查看进程的归属者 方法一:ps -f -p pid…

360极速浏览器X终极奥义之——更改划词工具条的搜索为百度搜索 2023更新版

原文为2019版本,具体已失效,2023更新。 1.需要将 https://www.so.com/s?q%s&src360csex_zoned字符串对应的十六进制码替换为 https://www.baidu.com/s?wd%s&src360csex_z对应的十六进制码。 2.需要删除后面的"oned"以保证转换出来…

冒泡排序~

1、对应长度len 数组,需要进行 len -1 趟冒泡,每趟冒泡,将最大(小)元素排列到最后无序位置 2、每趟冒泡从第一个元素开始,邻近两两比较,找出最大元素 每一趟冒泡,都进行元素交换&am…

基于频谱信息的图像去噪与恢复——使用约束最小二乘方滤波法

大家好,我是带我去滑雪! 随着科学技术的不断发展,信息的交流和获取已不再受到时空的限制,已经成为人们日常生活中不可或缺的一部分。图像作为人类信息交流中的重要载体,起着不可替代的作用。频谱图像去噪复原方法是一种…

Hive【Hive(一)DDL】

前置准备 需要启动 Hadoop 集群,因为我们 Hive 是在 Hadoop 集群之上运行的。 从DataGrip 或者其他外部终端连接 Hive 需要先打开 Hive 的 metastore 进程和 hiveserver2 进程。 Hive DDL 数据定义语言 1、数据库(database) 创建数据库 c…

YOLOv8『小目标』检测指南

前言 目前博主课题组在进行物体部件的异常检测项目,项目中需要先使用 YOLOv8 进行目标检测,然后进行图像切割,最后采用 WinCLIP 模型 进行部件异常检测 但是在实际操作过程中出现问题, YOLOv8 模型目标检测在大目标精确度不错&a…

Vue的详细教程--入门

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Vue的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.Vue是什么 二. Vue的特点及优势 三.使用…

IT运维:利用数据分析平台采集Windows event log数据

概述 本文将介绍如何借助Winlogbeat和Vector在鸿鹄里采集Windows event log数据,使技术人员能够在鸿鹄里更便捷和高效地分析Windows event log数据。 操作步骤 Winlogbeat是一个开源的日志数据采集器,专门用于采集Windows操作系统中的event log数据。它可…

【JAVA数据结构】包装类与认识泛型

作者主页:paper jie 的博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVA数据结构》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精…

解决 Cannot read property ‘key‘ of undefined

目录 问题解决1解决2最终 问题 现场环境分页查询某些条件项查询时,分页接口获取成功但是数据不渲染,页面像是卡住了: 报错 Cannot read property key of undefined 解决1 有人说 使用的el-pagination在格式化代码的时候layout属性的参数会多加…

vue基础知识十一:Vue组件之间的通信方式都有哪些?

一、组件间通信的概念 开始之前,我们把组件间通信这个词进行拆分 组件通信 都知道组件是vue最强大的功能之一,vue中每一个.vue我们都可以视之为一个组件通信指的是发送者通过某种媒体以某种格式来传递信息到收信者以达到某个目的。广义上,…

Gin 框架 解决 跨域问题

Gin 框架解决跨域问题 一点废话 在学习 Axios 的时候发现 up 使用了一个网址来提供 json 数据。因为不想加什么公众号搞啥百度网盘的,然后又刚好会一点点 go,就想着自己用 gin 框架返回一个 json 到前端页面然后从这个页面获取 json 。 这是我的go代码…

堡垒机的相关介绍

描述 堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段监控和记录运维人员对网络内的服务器、网络设备、安全设备、数据库等设备的操作行为,以便集中报警、及时处理及审…

javafx学习记录

1.布局 2.选择重写或实现方法(select methods to override/implements) ctrl o 3.javafx有init方法,start方法,stop方法 4.定义一个按钮,使用系统默认浏览器访问网站 5.使窗口的关闭栏,缩小扩屏栏,代码是倒数第二行 6.设置模态窗口,默认关闭模态的 下…

Leetcode 剑指Offer

求 12...n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 示例 1: 输入: n 3 输出: 6示例 2: 输入: n 9 输出: 45 一、信息 1.求一个等差数列的求和 2.要求不能使…

dubbo3 遇坑小结

最近给一个dubbo3的应用改名字,发现消费者还是会请求以前的地址。 问题现象 应用部署是k8s容器环境,dubbo版本是3.1.1,应用appA名字改成appB。改完名发现消费者应用appC请求还是会往以前的地址请求(当然是请求不通的) 问题分析 分析日志 d…