react 之 Class API

class API就是编写类组件,虽然react官方不在推荐使用,但是一般公司里维护的老项目里还是有的,可以简单了解下

1.类组件的基础结构

类组件就是通过js里的类来组织组件的代码的

1️⃣通过类属性state定义状态数据
2️⃣通过setState方法来修改状态数据
3️⃣通过render来写UI模版(JSX语法一致)

// Class API
import { Component } from "react"
class Counter extends Component {// 编写组件的逻辑代码// 1. 状态变量  2. 事件回调  3.UI(JSX)// 1. 定义状态变量state = {count: 0}// 2. 定义事件回调修改状态数据setCount = () => {// 修改状态数据this.setState({count: this.state.count + 1})}render () {return <button onClick={this.setCount}>{this.state.count}</button>}
}
function App () {return (<><Counter /></>)
}export default App

2.类组件的生命周期函数

概念:组件从创建到销毁的各个阶段自动执行的函数就是生命周期函数
在这里插入图片描述
1.componentDidMount:组件挂载完毕自动执行 —— 异步数据获取(组件渲染完毕执行一次,发送网络请求)
2.componentWillUnmount:组件卸载时自动执行 —— 清理副作用(比如清楚定时器,清除事件绑定)

// Class API 生命周期import { Component, useState } from "react"class Son extends Component {// 声明周期函数// 组件渲染完毕执行一次  发送网络请求componentDidMount () {console.log('组件渲染完毕了,请求发送起来')// 开启定时器this.timer = setInterval(() => {console.log('定时器运行中')}, 1000)}// 组件卸载的时候自动执行  副作用清理的工作 清除定时器 清除事件绑定componentWillUnmount () {console.log('组件son被卸载了')// 清除定时器clearInterval(this.timer)}render () {return <div>i am Son</div>}
}function App () {const [show, setShow] = useState(true)return (<>{show && <Son />}<button onClick={() => setShow(false)}>unmount</button></>)
}export default App

3.类组件的组件通信

概念:类组件和hooks编写的组件在组件通信的思想上完全一致
1️⃣父传子:直接通过prop子组件标签身上绑定父组件中的数据

// Class API 父子通信
import { Component } from "react"
// 子组件
class Son extends Component {render () {// 使用this.props.msgreturn <><div>我是子组件 {this.props.msg}</div></>}
}// 父组件
class Parent extends Component {state = {msg: 'this is parent msg'}render () {return <div>我是父组件<Son msg={this.state.msg}/></div>}
}
function App () {return (<><Parent /></>)
}export default App

2️⃣子传父:在子组件标签身上绑定父组件中的函数,子组件中调用这个函数传递参数

// Class API 父子通信import { Component } from "react"
// 1. 父传子  直接通过prop子组件标签身上绑定父组件中的数据即可
// 2. 子传父  在子组件标签身上绑定父组件中的函数,子组件中调用这个函数传递参数// 总结
// 1. 思想保持一致
// 2. 类组件依赖于this// 子组件
class Son extends Component {render () {// 使用this.props.msgreturn <><button onClick={() => this.props.onGetSonMsg('我是son组件中的数据')}>sendMsgToParent</button></>}
}// 父组件
class Parent extends Component {getSonMsg = (sonMsg) => {console.log(sonMsg)}render () {return <div>我是父组件<Son onGetSonMsg={this.getSonMsg} /></div>}
}function App () {return (<><Parent /></>)
}export default App

3.1总结

跟hooks思想保持一致
类组件依赖于this

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

你的BOSS被攻击时的闪白效果

点击上方亿元程序员关注和★星标 引言 被攻击时的闪白效果 在许多游戏中&#xff0c;为了增加战斗的紧张感和玩家体验&#xff0c;开发者通常会采用一些视觉效果来强调角色或物体受到攻击的瞬间。 其中&#xff0c;受击闪白效果是一种常见的设计手法&#xff0c;通过在目标上…

CSS transition(过渡效果)详解并附带示例

CSS过渡效果&#xff08;CSS transitions&#xff09;是一种在元素属性值发生变化时&#xff0c;通过指定过渡效果来实现平滑的动画效果的方法。通过定义起始状态和结束状态之间的过渡属性&#xff0c;可以使元素的变化更加流畅和可视化。 过渡效果的基本语法如下&#xff1a;…

vit细粒度图像分类(九)RAMS-Trans学习笔记

1.摘要 在细粒度图像识别(FGIR)中&#xff0c;区域注意力的定位和放大是一个重要因素&#xff0c;基于卷积神经网络(cnn)的方法对此进行了大量探索。近年来发展起来的视觉变压器(ViT)在计算机视觉任务中取得了可喜的成果。与cnn相比&#xff0c;图像序列化是一种全新的方式。然…

Harbor介绍、整体架构和安装

1.Harbor介绍 Harbor 是由 VMware 开源的一款云原生制品仓库&#xff0c;Harbor 的核心功能是存储和管理 Artifact。Harbor 允许用户用命令行工具对容器镜像及其他 Artifact 进行推送和拉取&#xff0c;并提供了图形管理界面帮助用户查看和管理这些 Artifact。在 Harbor 2.0 版…

爬虫(二)

1.同步获取短视频 1.只要播放地址对Json数据解析&#xff0c;先把列表找出&#xff1a; 2.只想要所有的播放地址&#xff0c;通过列表表达式循环遍历这个列表拿到每个对象&#xff0c;再从一个个对象里面找到Video,再从Video里面找到播放地址(play_addr),再从播放地址找到播放…

系统架构20 - 统一建模语言UML(上)

统一建模语言 组成要素事物关系 在目前的软件开发方法中&#xff0c;面向对象的方法占据着主导地位。面向对象方法的主导地位也决定着软件开发过程模型化技术的发展&#xff0c;面向对象的建模技术方法也就成为主导的方法。 公认的面向对象建模语言出现于20世纪70年代中期。从1…

【乳腺肿瘤诊断分类及预测】基于自适应SPREAD-PNN概率神经网络

课题名称&#xff1a;基于自适应SPREAD-PNN的乳腺肿瘤诊断分类及预测 版本日期&#xff1a;2023-06-15 运行方式: 直接运行PNN0501.m 文件即可 代码获取方式&#xff1a;私信博主或QQ&#xff1a;491052175 模型描述&#xff1a; 威斯康辛大学医学院经过多年的收集和整理&…

四、图像像素读写操作

一、图像像素读写——头文件 在项目的头文件中&#xff0c;右击添加&#xff0c;新建项 创建用于对图像显示进行操作的头文件&#xff0c;我这边是pixel_operate.h 该头文件声明了一个Pixel类(class Pixel)&#xff0c;该类下面声明一个函数(void pixel_operate(Mat &i…

创建一个Vue项目(含npm install卡住不动的解决)

目录 1 安装Node.js 2 使用命令提示符窗口创建Vue 2.1 打开命令提示符窗口 2.2 初始Vue项目 2.2.1 npm init vuelatest 2.2.2 npm install 3 运行Vue项目 3.1 命令提示符窗口 3.2 VSCode运行项目 1 安装Node.js 可以看我的这篇文章《Node.js的安装》 2 使用命令提示…

ruoyi(若依)(el-menu也可参考)菜单栏过长显示省略号才显示气泡

一、背景 若依前后端分离的版本&#xff0c;新版本中优化了菜单名称过长悬停显示标题&#xff0c;但是是悬浮所有长度大于5的标题。可以查看提交记录&#xff1a;https://gitee.com/y_project/RuoYi-Cloud/commit/99932d91c0144da9f34f5bb05683cc0b86303217 但是我希望是只悬浮…

深入理解网络通信和TCP/IP协议

目录 计算机网络是什么&#xff1f; 定义和分类 计算机网络发展简史 计算机网络体系结构 OSI 七层模型 TCP/IP 模型 TCP/IP 协议族 TCP/IP 网络传输中的数据 地址和端口号 MAC地址 IP 地址 端口号 为什么端口号有65535个&#xff1f; 综述 TCP 特性 TCP 三次握…