React笔记(三)类组件(1)
一、组件的概念
使用组件方式进行编程,可以提高开发效率,提高组件的复用性、提高代码的可维护性和可扩展性
React定义组件的方式有两种
-
类组件:React16.8版本之前几乎React使用都是类组件
-
函数组件:React16.8之后,函数式组件使用的越来越多
二、组件定义
1、ES6类的回顾
类组件:类组件是指使用ES6中class定义的组件称为类组件
回顾类的定义
class 类名{}
类是由属性和方法组成
-
类中的属性:表示的事物的特征
-
类中方法:表示的是对象的行为
class 类名{属性名1;属性名2;方法名1(){}方法名2(){}
}
案例1:类的定义
/*定义一个学生类class 类名{
}类名的规定1、类名是由字母、数字、下划线或者$符号组成2、名称不能以数字开头3、类名之间不能由空格、不能是关键字或者保留字4、不能是true,false,null5、类名采用驼峰式命名法,每个单词的首字母要大写6、要见名知意
*/
class Student{sno; //学号sname; //姓名gender; //性别education; //学历major; //专业introduce(){return `学号:${this.sno}\n姓名:${this.sname}\n性别:${this.gender}\n学历:${this.education}\n专业:${this.major}`}
}
/*创建对象的语法const/let 对象名=new 类名()给对象赋值的语法对象名.属性名=值调用对象中的方法对象名.方法名()
*/
const s1=new Student()
s1.sno="XAWNW1001"
s1.sname="张资源"
s1.gender="男"
s1.education="本科"
s1.major="土木工程"
let info=s1.introduce()
console.log(info);
console.log('*******************************');
const s2=new Student()
s2.sno="XAWNW1002"
s2.sname="李敏"
s2.gender="女"
s2.education="本科"
s2.major="英语"
console.log(s2.introduce());
案例2:构造方法的使用
class Student{constructor(sno,sname,gender,education,major){this.sno=snothis.sname=snamethis.gender=genderthis.education=educationthis.major=major}introduce(){return `学号:${this.sno}\n姓名:${this.sname}\n性别:${this.gender}\n学历:${this.education}\n专业:${this.major}`}
}
/*实例化对象的同时进行初始化let/const 对象名=new 类名(实参1,实参1,....,实参n)*/
const s1=new Student('WNXAK1001','何新雨','男','专科','通讯工程')
console.log(s1.introduce());
console.log("*********************************************");
const s2=new Student('WNXAK1002','李乐','男','专科','英语')
console.log(s2.introduce());
案例3:类的继承
class Teacher{constructor(name,school){this.name=namethis.school=school}introduce(){return `我是${this.school}的${this.name}`}giveLession(){console.log('讲解本章目标');console.log('讲解本章内容');console.log('进行本章总结');console.log('安排今日作业');}
}
/*** 定义一个子类* 继承的语法* class 子类的名称 extends 父类名称{* }* super关键字的使用* suepr()直接调用父类的构造方法,它的位置必须放在子类构造方法的首行* super.父类中的方法/父类中的属性* 方法的重写:是在继承关系中,子类中的方法名和父类中的方法名,参数个数相同的这么一种情况,称为方法的重写* 方法重写的结果就是子类中的内容完全覆盖父类中方法中的内容*/
class WebTeacher extends Teacher{constructor(name,school){super(name,school)}giveLession(){console.log('首先打开vscode开发环境');super.giveLession()}
}
class TestTeacher extends Teacher{constructor(name,school){super(name,school)}giveLession(){console.log('打开postman或者vm虚拟机');super.giveLession()}
}
let zhaijizhe=new WebTeacher('吉','学苑')
console.log(zhaijizhe.introduce());
zhaijizhe.giveLession()
console.log('********************************');
let xuhaidong=new WebTeacher('东','学苑')
console.log(xuhaidong.introduce());
xuhaidong.giveLession()
console.log('**************************************');
const wangxiaofeng=new TestTeacher('峰','学苑')
console.log(wangxiaofeng.introduce())
wangxiaofeng.giveLession()
2、定义类组件
类组件:是指通过ES6类来定义的组件称为类组件,React中定义类组件有如下约定
-
类名首字母大写
-
类组件必须要继承React.Component父类,这个父类中的相关的方法和属性就能被继承下来
-
类组件中必须要有一个render方法
-
这个render必须要要有返回值,返回值的内容就是这个类组件的结构(jsx)
-
由于这个类组件要被别的组件引用,所以使用ES6的默认导出将其导出,便于别的组件引用
import React from "react"
export default class Hello extends React.Component{render(){return(<><h1>Hello组件</h1></>) }
}
类组件定义之后,引入这个类组件
import ReactDOM from 'react-dom/client'
import Hello from './components/Hello'
const template=(<><Hello></Hello>
</>)
const root=ReactDOM.createRoot(document.querySelector('#root'))
root.render(template)
3、定义函数组件【后面重点讲】
在React中除了定义类组件之外,也可以定义函数组件
函数组件:所谓函数组件是指通过普通函数或者箭头函数所定义出来的组件称为函数组件
函数组件有如下规定
-
函数名必须首字母大写
-
使用ES6的export将其默认导出,便于别的组件引用
-
函数必须要有一个返回值,这个返回的内容是JSX,返回的是该函数组件的结构
export default function HelloWorld(){return (<><h1>Hello World函数组件</h1></>)
}
注意:如果不返回任何内容,假设返回一个null,页面将没有任何内容
在实际开发过程中,由于这些类组件和函数组件它的结构都是固定的,所以可以使用一些插件将其生成出来
使用rcc
生成类组件,使用rfc
生成函数组件
三、React的事件处理
1、React的事件处理
在React中通过onXx属性来实现单击事件的绑定的,常见的写法有四种
-
直接在标签中通过
onClick={()=>{}}
来实现事件绑定 -
在标签中通过
onClick={this.类中的普通的成员方法}
的方式来进行绑定 -
在标签中通过
onClick={this.类中的箭头函数}
的方式绑定 -
在标签中通过
onClikc={()=>{this.函数名称()}}
import React, { Component } from 'react'export default class Hello extends Component {/*不要使用这种方法*/handleClick(){console.log('类中定义普通方法',this);}handleClick2=()=>{console.log('类中定义的箭头函数',this);}render() {return (<><button onClick={()=>{console.log('我是按钮1,我被点击了~~~~');}}>按钮1</button><button onClick={this.handleClick}>按钮2</button><button onClick={this.handleClick2}>按钮3</button><button onClick={()=>{this.handleClick2()}}>按钮4</button></>)}
}
2、this指向的回顾
let teacher={name:'teacher'
}
let student={name:'student'
}
let person={name:'person',show(age,sex){return `我叫${this.name},今年${age}岁,我的性别是${sex}`}
}
console.log(person.show(38,'男'))
//改变this指向,改变this执行的方式有三个,第一个是call,call的作用调用函数,还可以改变this执行
console.log(person.show.call(teacher,48,'女'));
//通过apply的方式也可以调用函数,这种方式调用方法同时,改变this指向
console.log(person.show.apply(student,[22,'男']));
//通过bind的方式来改变this指向
let teaherShow=person.show.bind(teacher)
console.log(teaherShow(55,'男'));
如果使用第二方式来进行事件绑定的时候,会存在this执行为空的情况,解决办法如下
-
使用箭头函数写法代替普通方法(建议)
-
通过bind方式来改变this执行(不建议)
this执行改变的代码可以写在多个位置,比如写在构造函数中(经典的写法)
export default class Hello extends Component {constructor(){super()//改变this执行this.handleClick=this.handleClick.bind(this)}
}
也可以在调用的同时去改变this指向(不建议)
<button onClick={this.handleClick.bind(this)}>按钮2</button>
3、事件传参
import React, { Component } from 'react'
/*React的事件传值的形式有如下三种1、进行事件传值的时候,没有实参,默认形参接收的event对象2、进行事件调用的同时,传递额外的参数
*/
export default class Hello extends Component {handleClick=(e)=>{console.log('e',e);}handleClick2=(arg1,arg2,arg3)=>{console.log('参数1:',arg1);console.log('参数2:',arg2);console.log('参数3:',arg3);}handleClick3=(arg1,arg2,arg3,arg4)=>{console.log('参数1:',arg1);console.log('参数2:',arg2);console.log('参数3:',arg3);console.log('参数4:',arg4);}render() {return (<><button onClick={this.handleClick}>按钮1</button><button onClick={()=>{this.handleClick2(22,33,56)}}>按钮2</button><button onClick={(e)=>{this.handleClick3(89,e,99,78)}}>按钮3</button></>)}
}
4、合成事件的原理
4.1、底层实现原理
<div onClick={this.handleClick.bind(this)}>点我</div>
React并不是将click事件绑定到了div的真实DOM上
-
在React16版本中,是在document处 监听了所有的事件,当事件发⽣并且冒泡到document处的时候,React将事 件内容封装并交由真正的处理函数运⾏。
-
在React17版本中,是在根容器(
#root
)处 监听了所有的事件,当事件发⽣并且冒泡到根容器处的时候,React将事 件内容封装并交由真正的处理函数运⾏。
这样的⽅式不仅仅减少了内存的消 耗,还能在组件挂载销毁时统⼀订阅和移除事件。 除此之外,冒泡到document上的事件也不是原⽣的浏览器事件,⽽是由 react⾃⼰实现的合成事件(SyntheticEvent)。
实现合成事件的⽬的如下:
-
合成事件⾸先抹平了浏览器之间的兼容问题,另外这是⼀个跨浏览器原⽣ 事件包装器,赋予了跨浏览器开发的能⼒;
-
对于原⽣浏览器事件来说,浏览器会给监听器创建⼀个事件对象。如果你 有很多的事件监听,那么就需要分配很多的事件对象,造成⾼额的内存分 配问题。但是对于合成事件来说,有⼀个事件池专⻔来管理它们的创建和 销毁,当事件需要被使⽤时,就会从池⼦中复⽤对象,事件回调结束后, 就会销毁事件对象上的属性,从⽽便于下次复⽤事件对象。
4.2、 React的事件和普通的HTML事件有什么不同
区别:
-
对于事件名称命名⽅式,原⽣事件为全⼩写,react 事件采⽤⼩驼峰;
-
对于事件函数处理语法,原⽣事件为字符串,react 事件为函数;
-
react 事件不能采⽤ return false 的⽅式来阻⽌浏览器的默认⾏为,⽽必须要地明确地调⽤preventDefault()来阻⽌默认⾏为。
合成事件是 react 模拟原⽣ DOM 事件所有能⼒的⼀个事件对象,其优点如 下:
-
兼容所有浏览器,更好的跨平台;
-
将事件统⼀存放在⼀个数组,避免频繁的新增与删除(垃圾回收)。
-
⽅便 react 统⼀管理和事务机制。
事件的执⾏顺序为原⽣事件先执⾏,合成事件后执⾏,合成事件会冒泡绑定到 document 上,所以尽量避免原⽣事件与合成事件混⽤,如果原⽣事件阻⽌冒 泡,可能会导致合成事件不执⾏,因为需要冒泡到document 上合成事件才会 执⾏。
四、类组件的state
vue框架和React框架最大的一个好处就是不需要开发人员去操作DOM,只要大家操作了数据,自动DOM元素会发生变化,这种操作称为响应式d
在vue中响应式数据主要来自两个部分
-
组件内部的响应式数据是定义在data选项
-
来子组件外部的是通过props来完成定义的
在React中也是一样,如果要定义响应式数据,组件内部的数据是定义在组件的state中,组件外部的数据是定义在props中
1、有状态组件和无状态组件
类组件是有状态组件:因为一个组件的状态是存放在类的实例上,state,props都是存在this上,所以类组件被称为有状态组件
函数组件是无状态组件:函数组件都没有this,函数是不能存放状态的
类组件比较强大,函数组件比较单一,之前类组件可以完成复杂的功能,但是函数组件是简单的组件
在React16.8版本之后引入hooks,可以让函数组件也能操作状态、
总结:React16.8之前函数组件是无状态组件,几乎很少用
2、基本使用步骤
使用state定义数据一共有三步骤
第一步:定义数据
定义数据可以在构造函数内部定义,也可以在构造函数外部定义
第二步:获取数据
在使用数据的时候为了提高读取性能,最好使用解构赋值方式
第三步:修改数据
修改数据的时候一定要使用setState({})来修改数据,这个方法是一个异步方法
第1步、定义数据
-
定义数据的时候可以在构造函数中定义数据,如下所示
class Counter extends React.Component{constructor(){super();this.state={count:0}}render(){return (<div><h2>计数器</h2></div>)}
}
export default Counter;
-
也可以在构造函数外部定义,这种是利用ES6属性的简化语法,如下所示
class Counter extends React.Component{//简化语法state={count:0}render(){return (<div><h2>计数器</h2></div>)}
}
export default Counter;
第2步、获取数据
通过this.state获取数据
class Counter extends React.Component{constructor(){super();this.state={count:0}}render(){return (<div><h2>计数器</h2><span>{this.state.count}</span></div>)}
}
export default Counter;
在使用数据的时候,最好使用解构赋值的方式,这样能够提高性能
import React, { Component } from 'react'export default class Counter extends Component {state = {num: 0}constructor() {super()}render() {const { num } = this.state;return (<div><h1>计数器</h1><span>{num}</span></div>)}
}
第3步、修改数据
-
状态是可以改变的
-
语法:this.setState({要修改的数据})
-
注意:不要直接修改state中的值,这样是错误的
-
setState()作用:1.修改state 2.更新UI
import React, { Component } from 'react'export default class Counter extends Component {state = {num: 0}constructor() {super()}render() {const { num } = this.state;return (<div><h1>计数器</h1><span>{num}</span><button onClick={() => {this.setState({num: this.state.num + 1})}}>+1</button></div>)}
}
3、购物车案例
实现步骤
-
在compotents下创建ShopcartList.jsx,并在App.jsx中引入这个自定义组件
-
ShopcartList.jsx中的关键代码如下
import React, { Component } from 'react'
import '../assets/css/shopcartList.scss'export default class ShopcartList extends Component {constructor() {super()//定义状态数据this.state = {shopcartList: [{pid: '1001',pname: '欧莱雅男士护肤',price: 38,num: 1},{pid: '1002',pname: 'OLAY女士防皱润肤露',price: 108,num: 1},{pid: '1003',pname: '自然堂女士护肤',price: 108,num: 2},{pid: '1004',pname: '兰蔻香水',price: 1038,num: 1},{pid: '1005',pname: '大宝SOD,每个人选择',price: 8,num: 1}]}}//改变数量的方法changeNum = (sign, index) => {switch (sign) {case '+'://如下这个操作,它只能将数据进行更新,页面没有进行变化this.state.shopcartList[index].num++breakcase '-':if (this.state.shopcartList[index].num > 1) {this.state.shopcartList[index].num--} else {window.alert('数量不能少于0')}break}this.setState({shopcartList: this.state.shopcartList})}//计算总价的函数total = ary => `¥${ary.reduce((pre, cur) => pre + cur.price * cur.num, 0).toFixed(2)}`//删除方法deleteShopcartList = index => {if (window.confirm('您确定要删除吗?')) {//数组中的splice方法的参数的含义//第一参数:表示要操作数组的下标//第二个参数:表示的是要删除几个数据this.state.shopcartList.splice(index, 1)//使用this.setState来页面this.setState({shopcartList: this.state.shopcartList})}}render() {const { shopcartList } = this.statereturn (<div><h2>购物车</h2><table><thead><tr><td>序号</td><td>名称</td><td>价格</td><td>数量</td><td>小计</td><td>操作</td></tr></thead><tbody>{shopcartList.map((item, index) => <tr key={item.pid}><td>{item.pid}</td><td>{item.pname}</td><td>{item.price}</td><td><button className='operbtn' onClick={() => { this.changeNum('-', index) }}>-</button>{item.num}<button className='operbtn' onClick={() => { this.changeNum('+', index) }}>+</button></td><td>{item.price * item.num}</td><td><button className='delBtn' onClick={() => { this.deleteShopcartList(index) }}>删除</button></td></tr>)}</tbody><tfoot><tr><td colSpan={6}>{this.total(shopcartList)}</td></tr></tfoot></table></div>)}
}
4、setState同步还是异步
setState是同步还是异步的
-
React18之后setState是异步的,如果是React18之前,setState根据情况来决定,可能是同步的也可以能是异步的
-
React18版本之后的
-
在React的事件处理中(合成事件),setState是异步的
-
在setTimeout、setInterval、原生js中它也是异步的(重点区别)
-
如果要在react18版本中将this.setState由异步变成同步,需要使用
flushSync
-
componentDidMount() {console.log('1、', this.state.count);document.querySelector('#btn').addEventListener('click', () => {flushSync(()=>{{this.setState({count: this.state.count + 1})console.log('2、', this.state.count);}})flushSync(()=>{this.setState({count: this.state.count + 1})console.log('3、', this.state.count);})})}
-
React18版本之前
-
在React的事件处理中(合成事件),setState是异步的
-
在setTimeout、setInterval、原生js中它也是同步的
-
5、setState的另外一种写法
setState((state,props)=>{},()=>{})
相关文章:

React笔记(三)类组件(1)
一、组件的概念 使用组件方式进行编程,可以提高开发效率,提高组件的复用性、提高代码的可维护性和可扩展性 React定义组件的方式有两种 类组件:React16.8版本之前几乎React使用都是类组件 函数组件:React16.8之后,函数式组件使…...
Hugging Face实战-系列教程4:padding与attention_mask
🚩🚩🚩Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在notebook中进行 本篇文章配套的代码资源已经上传 上篇内容: Hugging Face实战-系列教程3:文本2分类 下篇内容: …...

睿趣科技:抖音开网店卖玩具怎么样
近年来,随着社交媒体平台的飞速发展,抖音作为一款短视频分享应用也迅速崭露头角。而在这个充满创业机遇的时代背景下,许多人开始探索在抖音平台上开设网店,尤其是卖玩具类商品,那么抖音开网店卖玩具究竟怎么样呢? 首先…...

简易虚拟培训系统-UI控件的应用4
目录 Slider组件的常用参数 示例-使用Slider控制主轴 示例-Slider控制溜板箱的移动 本文以操作面板为例,介绍使用Slider控件控制开关和速度。 Slider组件的常用参数 Slider组件下面包含了3个子节点,都是Image组件,负责Slider的背景、填充区…...

#include <graphics.h> #include <conio.h> #include<stdlib.h>无法打开源文件解决方案
一、问题描述 学习数据结构链表的过程中,在编写漫天星星闪烁的代码时,遇到了如下图所示的报错,#include <graphics.h> 、 #include <conio.h> 等无法打开源文件。 并且主程序中initgraph(初始化画布)、setfillcolor(…...
【C语言】数据结构的基本概念与评价算法的指标
1. 数据结构的基本概念 1.1 基本概念和术语 1.1.1 数据 数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料 1.1.2 数据元素 数据元素是数据的基本单位,通常作为一个整体进行考虑和…...

[PyTorch][chapter 54][Variational Auto-Encoder 实战]
前言: 这里主要实现: Variational Autoencoders (VAEs) 变分自动编码器 其训练效果如下 训练的过程中要注意调节forward 中的kle ,调参。 整个工程两个文件: vae.py main.py 目录: vae main 一 vae 文件名: vae…...
Java实现HTTP的上传与下载
相信很多人对于java文件下载的过程都存在一些疑惑,比如下载上传文件会不会占用vm内存,上传/下载大文件会不会导致oom。下面从字节流的角度看下载/上传的实现,可以更加深入理解文件的上传和下载功能。 文件下载 首先明确,文件下载…...

VPG算法
VPG算法 前言 首先来看经典的策略梯度REINFORCE算法: 在REINFORCE中,每次采集一个episode的轨迹,计算每一步动作的回报 G t G_t Gt,与动作概率对数相乘,作为误差反向传播,有以下几个特点: …...

docker 笔记5:redis 集群分布式存储案例
尚硅谷Docker实战教程(docker教程天花板)_哔哩哔哩_bilibili 目录 1.cluster(集群)模式-docker版哈希槽分区进行亿级数据存储 1.1面试题 1.1.1 方案1 哈希取余分区 1.1.2 方案2 一致性哈希算法分区 原理 优点 一致性哈希算法的容错性 一致性…...

【Vue2】 axios库
网络请求库-axios库 认识Axios库为什么选择Axios库安装Axios axios发送请求常见的配置选项简单请求可以给Axios设置公共的基础配置发送多个请求 axios创建实例为什么要创建axios的实例 axios的拦截器请求拦截器响应拦截器 axios请求封装 认识Axios库 为什么选择Axios库 在游览…...

云计算 - 百度AIStudio使用小结
云计算 - 百度AIStudio使用小结 前言 本文以ffmpeg处理视频为例,小结一下AI Studio的使用体验及一些避坑技巧。 算力获得 免费的算力获得方式为:每日登录后运行一个项目(只需要点击运行,不需要真正运行)即可获得8小…...

刷新你对Redis持久化的认知
认识持久化 redis是一个内存数据库,数据存储到内存中。而内存的数据是不持久的,要想做到持久化,就需要让redis把数据存储到硬盘上。因此redis既要在内存上存储一份数据,还要在硬盘上存储一份数据。这样这两份数据在理论上是完全相…...
Greenplum-最佳实践小结
注:本文翻译自https://docs.vmware.com/en/VMware-Greenplum/7/greenplum-database/best_practices-logfiles.html 数据模型 Greenplum数据库是一个分析型MPP无共享数据库。该模型与高度规范化/事务性的SMP数据库明显不同。Greenplum数据库使用适合MPP分析处理的非…...

从Gamma空间改为Linear空间会导致性能下降吗
1)从Gamma空间改为Linear空间会导致性能下降吗 2)如何处理没有使用Unity Ads却收到了GooglePlay平台的警告 3)C#端如何处理xLua在执行DoString时候死循环 4)Texture2DArray相关 这是第350篇UWA技术知识分享的推送,精选…...

双轨制的发展,弊端和前景
双轨制是一种经济体制,指两种不同的规则或机制并行运行,以适应不同的市场或客户需求。双轨制最早出现在中国的改革开放中,是从计划经济向市场经济过渡的一种渐进式改革方式。 双轨制的发展可以分为三个阶段: 第一阶段(…...

生成对抗网络(GAN):在图像生成和修复中的应用
文章目录 什么是生成对抗网络(GAN)?GAN在图像生成中的应用图像生成风格迁移 GAN在图像修复中的应用图像修复 拓展应用领域总结 🎉欢迎来到AIGC人工智能专栏~生成对抗网络(GAN):在图像生成和修复…...

扬杰科技携手企企通,召开SRM采购供应链协同系统项目启动会
近日,中国功率半导体领先企业扬州扬杰电子科技股份有限公司(以下简称“扬杰科技”)与企企通召开SRM采购供应链协同系统项目启动会,双方项目团队成员一同出席本次会议。 会上,双方就扬杰科技采购供应链管理平台项目的目…...
AtCoder Beginner Contest 318
目录 A - Full Moon B - Overlapping sheets C - Blue Spring D - General Weighted Max Matching E - Sandwiches F - Octopus A - Full Moon #include<bits/stdc.h> using namespace std; const int N1e65; typedef long long ll ; const int maxv4e65; typedef …...
《Python魔法大冒险》003 两个神奇的魔法工具
魔法师:小鱼,要开始编写魔法般的Python程序,我们首先需要两个神奇的工具:Python解释器和代码编辑器。 小鱼:这两个工具是做什么的? 魔法师:你可以把Python解释器看作是一个魔法棒,只要你向它说出正确的咒语,它就会为你施展魔法。 小鱼:那这个解释器和我之前用的电…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...

Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...