React函数式写法和类式写法的区别(以一个计数器功能为例子)
函数式写法更加简洁和函数式编程思维导向,适用于无状态、UI纯粹的组件,且可以使用Hooks处理副作用。而类式写法适用于有内部状态、生命周期方法和复杂交互逻辑的组件,提供了更多的灵活性和控制力。
文章目录
一、计数器功能演示
1.函数式写法
2.类式写法
二、函数式和类式的区别
三、函数式和类式在代码方面的不同
一、计数器功能演示
1.函数式写法
代码如下(示例):
import React, { useState } from 'react';const CounterFunctional = () => {const [count, setCount] = useState(0);const increment = () => {setCount(count + 1);};return (<div><h2>Counter (Functional)</h2><p>Count: {count}</p><button onClick={increment}>Increment</button></div>);
};export default CounterFunctional;
使用useState
钩子来声明一个名为count
的状态变量,并通过setCount
函数更新它。当点击按钮时,调用increment
函数来增加计数器的值。
2.类式写法
代码如下(示例):
import React from 'react';class CounterClass extends React.Component {constructor(props) {super(props);this.state = {count: 0,};}increment = () => {this.setState({ count: this.state.count + 1 });};render() {return (<div><h2>Counter (Class)</h2><p>Count: {this.state.count}</p><button onClick={this.increment}>Increment</button></div>);}
}export default CounterClass;
定义了一个名为CounterClass
的类组件。在构造函数中初始化了一个count
的状态属性。increment
方法被定义在类的原型上,用于增加计数器的值。在render
方法中,我们通过this.state.count
访问状态值,并将其渲染到UI中。
二、函数式和类式的区别
函数式写法:
- 纯函数:函数式组件本质上是一个纯函数,接收输入参数(
props
)并返回输出结果(JSX元素)。它没有内部状态,只依赖于传入的属性进行渲染和处理逻辑。- 函数组件:在React中,可以使用函数来定义组件。使用函数组件能够更简洁地编写UI组件,尤其是对于无需内部状态或生命周期方法的简单组件而言。
- React Hooks:函数式组件可以使用React Hooks,如
useState
、useEffect
等来管理状态、副作用和订阅等行为。Hooks提供了一种在函数组件中使用类组件类似功能的方式。类式写法:
- 类组件:在React中,可以通过继承
React.Component
类来创建组件。类组件具有内部状态和生命周期方法,允许组件拥有更多的复杂逻辑和交互。- 内部状态:类组件可以通过
state
属性来存储和更新内部数据。使用setState
方法可以触发组件的重新渲染,并在必要时执行相关操作。- 生命周期方法:类组件具有一系列生命周期方法(如
componentDidMount
、componentDidUpdate
等),可以在特定的时刻执行一些操作,例如数据获取、订阅和清理等。其他共同知识点:
- JSX:函数式和类式写法都使用JSX来描述UI层的结构和组件关系。JSX是一种将HTML标记和JavaScript代码结合的语法扩展。
- 属性传递:在函数式和类式组件中,通过属性(props)来传递数据和回调函数,使得组件之间可以共享信息和交互。
三、函数式和类式在代码方面的不同
状态管理:
- 函数式写法:使用React Hooks中的
useState
、useReducer
等钩子来管理组件的状态。- 类式写法:通过构造函数中的
this.state
来初始化并通过this.setState
方法进行状态更新。生命周期:
- 函数式写法:函数式组件没有生命周期方法,但可以使用
useEffect
钩子来处理组件挂载、更新和卸载时的副作用。- 类式写法:通过重写类的生命周期方法(如
componentDidMount
、componentDidUpdate
、componentWillUnmount
等)来处理组件生命周期事件。组件通信:
- 函数式写法:通过属性(props)传递数据和回调函数来实现父子组件之间的通信,也可以使用Context API或第三方库(如Redux)进行全局状态管理。
- 类式写法:同样通过属性(props)传递数据和回调函数来实现父子组件之间的通信,也可以使用Context API或Redux等进行全局状态管理。此外,类组件还可以通过
ref
引用来获取或操作子组件。内部状态和方法:
- 函数式写法:函数式组件没有内部状态(state)和实例方法(method),只关注接收属性和渲染UI。
- 类式写法:类组件可以通过
this.state
来定义内部状态,并通过类的方法来操作和更新状态。组件的性能优化:
- 函数式写法:使用React.memo进行函数组件的记忆化,以避免不必要的重渲染。
- 类式写法:使用shouldComponentUpdate或React.PureComponent来避免不必要的重渲染。
相关文章:
![](https://img-blog.csdnimg.cn/823f10a3e580496eb97cc0132ff06228.gif)
React函数式写法和类式写法的区别(以一个计数器功能为例子)
函数式写法更加简洁和函数式编程思维导向,适用于无状态、UI纯粹的组件,且可以使用Hooks处理副作用。而类式写法适用于有内部状态、生命周期方法和复杂交互逻辑的组件,提供了更多的灵活性和控制力。 文章目录 一、计数器功能演示 1.函数式写法…...
![](https://www.ngui.cc/images/no-images.jpg)
【根据国防科大学报官网word模板修改的Latex模板】
根据国防科大学报官网word模板修改的Latex模板 学报Word模板链接Latex模板结构编译环境为Texlivevscode或Textstudio 学报Word模板链接 学报官网相关下载链接 点击链接即可前往官网下载相关word模板 Latex模板结构 latex模板 ass.cfg文件 %深层模板文件ass.cls文件 %浅层模板…...
![](https://www.ngui.cc/images/no-images.jpg)
系列十一、Redis中分布式缓存实现
一、缓存 1.1、什么是缓存 内存就是计算机内存中的一段数据。 1.2、内存中的数据特点 读写快断电数据丢失 1.3、缓存解决了什么问题 提高了网站的吞吐量和运行效率减轻了数据库的访问压力 1.4、哪些数据适合加缓存 使用缓存时,一定是数据库中的数据极少发生改…...
![](https://www.ngui.cc/images/no-images.jpg)
Spark大数据分析与实战笔记(第一章 Scala语言基础-4)
文章目录 每日一句正能量1.4 Scala面向对象的特性1.4.1 类与对象的特性1.4.2 继承1.4.3 单例对象和伴生对象1.4.4 特质 每日一句正能量 若要快乐,就要随和;若要幸福,就要随缘。快乐是心的愉悦,幸福是心的满足。别和他人争吵&#…...
![](https://img-blog.csdnimg.cn/09567dda267847eea03703719d5d4839.png)
腾讯云服务器端口localhost可以访问,外部无法访问解决
搭建frp跳板,发现无法使用。ssh 连接不上。 主要检查2个东西: 1. ubuntu ufw系统防火墙。这个默认是关掉的 2. tencent这个防火墙规则设置后,还要设置到实例上。 以前不是这样的。就掉坑里了。 # systemctl rootVM-4-4-ubuntu:/lib/syst…...
![](https://img-blog.csdnimg.cn/2fd3899bf61b4c8f82334df4630331ca.png)
【软考-中级】系统集成项目管理工程师 【16 变更管理】
持续更新。。。。。。。。。。。。。。。 【第十六章】变更管理 (选择2分 考点 1:变更的常见原因考点 2:变更管理的原则是项目基准化、变更管理过程规范化考点 3考点 4考点 5:变更的工作程序考点 6考点 7考点 8考点 9考点 10考点 11考点 12:变更分类系列文章经典语录 考点 1:变…...
![](https://img-blog.csdnimg.cn/ba721df27b8c4a92b851c85d3f9ab579.png)
【Eclipse】查看版本号
1.在Eclipse的启动页面会出现版本号 2. Eclipse的关于里面 Help - About Eclipse IDE 如下图所示,就为其版本 3.通过查看readme_eclipse.html文件...
![](https://www.ngui.cc/images/no-images.jpg)
论文精讲目录
ViT论文逐段精读【论文精读】MoCo 论文逐段精读【论文精读】对比学习论文综述【论文精读】Swin Transformer论文精读【论文精读】CLIP 论文逐段精读【论文精读】双流网络论文逐段精读【论文精读】I3D 论文精读【论文精读】视频理解论文串讲(上)【论文精读…...
![](https://www.ngui.cc/images/no-images.jpg)
双飞翼布局和圣杯布局
双飞翼布局和圣杯布局都是一种三栏布局,其中主要内容区域位于中间,左侧栏和右侧栏位于两侧。它们的实现方式类似,但有一些细微的差别。 双飞翼布局的实现原理是通过使用flex布局,给主要内容区域设置flex:1;…...
![](https://www.ngui.cc/images/no-images.jpg)
Hive insert插入数据与with子查询
1. insert into 与 insert overwrite区别 insert into 与 insert overwrite 都可以向hive表中插入数据,但是insert into直接追加到表中数据的尾部,而insert overwrite会重写数据,既先进行删除,再写入 注意:如果存在分…...
![](https://www.ngui.cc/images/no-images.jpg)
如何在Django中集成JWT
文章目录 JWT简介在Django中使用JWT1. 安装2. 配置3. 添加认证接口 客户端使用JWT1. 获取新token2. 调用API3. 刷新token 同步发布在个人站点:https://panzhixiang.cn JWT简介 JWT(JSON Web Token)是一种流行的跨域认证解决方案。它可以在令牌中安全地传输用户身份…...
![](https://www.ngui.cc/images/no-images.jpg)
hive进行base64 加密解密函数
加密 select base64(cast(abcd as binary))YWJjZA 解密 -- 直接解密(结果字段格式为比binary格式) select unbase64(YWJjZA) -- 格式转换 select cast(unbase64(YWJjZA) as string) abcd...
![](https://img-blog.csdnimg.cn/9baae0979dd94878a220d3a26d687e82.png)
Docker安装GitLab及使用图文教程
作者: 宋发元 GitLab安装及使用教程 官方教程 https://docs.gitlab.com/ee/install/docker.html Docker安装GitLab 宿主机创建容器持久化目录卷 mkdir -p /docker/gitlab/{config,data,logs}拉取GitLab镜像 docker pull gitlab/gitlab-ce:15.3.1-ce.0运行GitLa…...
![](https://img-blog.csdnimg.cn/9d6398ae1d9f4b32b261c78fc87ec515.png)
asp.net酒店管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
一、源码特点 asp.net酒店管理系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言开发 asp.net 酒店管理系统1 二、功能介绍 …...
![](https://img-blog.csdnimg.cn/cb41e6d8894d4160af576b17bb5e814b.png)
Yolov安全帽佩戴检测 危险区域进入检测 - 深度学习 opencv 计算机竞赛
1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 Yolov安全帽佩戴检测 危险区域进入检测 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:4分 该项目较为新颖&am…...
![](https://www.ngui.cc/images/no-images.jpg)
vue中动态设置source标签
项目中有个视频播放,路径通过接口返回,而且不带后缀,并不确定是什么类型的视频文件,所以要通过source标签去进行设置. 问题:当video中存在source标签的时候,浏览器渲染之后会自动去获取地址,即便地址改变,浏览器也不会再去获取地址。 解决方…...
![](https://www.ngui.cc/images/no-images.jpg)
【16】基础知识:React路由 - React Router 6
一、概述 了解 React Router 以三个不同的包发布到 npm 上,它们分别为 1、react-router:路由的核心库,提供了很多的组件、钩子。 2、react-router-dom:包含 react-router 所有内容,并添加一些专门用于 DOM 的组件&…...
![](https://img-blog.csdnimg.cn/b79ccbc9e9a7424d806e789531828606.png)
Unity3D 基础——Coroutine 协同程序
Coroutine 称为协同程序或者协程,协同程序可以和主程序并行运行,和多线程有些类似。协同程序可以用来实现让一段程序等待一段时间后继续运行的效果。例如,执行步骤1,等待3秒;执行步骤2,等待某个条件为 true…...
![](https://www.ngui.cc/images/no-images.jpg)
IDEA报错:前言中不允许有内容
idea启动项目提示前言中不允许有内容 .idea\libraries\Maven__axis2_axis2_1_0.xml: ParseError at [row,col]:[1,1] Message: 前言中不允许有内容。 解决方法: 首先修改设置:IDEA–>File–>Settings–>File Encodings–>with No BOM选中报…...
![](https://img-blog.csdnimg.cn/e1d98b87ea704b84824769b56a9d20af.png)
在线课堂分销商城小程序源码系统 带完整搭建教程
大家好啊,今天来给大家分享一个在线课堂分销商城小程序源码系统,一起来看看吧。以下是部分功能实现的核心代码: 系统特色功能一览: 商品模块。包括实物商品、虚拟商品和电子卡密等,每种商品可以设置对应的商品分类。同…...
![](https://img-blog.csdnimg.cn/b93a6fc148104c049f6ae4f72bdc94f1.png)
【存储系统】0. 序
学习资料:大话存储 存储系统底层架构原理极限剖析 终极版 张冬编著——清华大学出版社 2015.01 文章目录 0.1 序0.1.1 信息存储技术溯源0.1.2 数字化信息推动存储技术发展0.1.3 数字存储技术 0.2 存储系统介绍0.2.1 信息0.2.2 数据0.2.3 数据存储0.2.4 用计算机来处…...
逐字稿 | 2 MoCo 论文逐段精读【论文精读】
bryanyzhu的个人空间-bryanyzhu个人主页-哔哩哔哩视频 评价 今天我们一起来读一下 MOCO 这篇论文。 MOCO 是 CVPR 2020 的最佳论文提名,算是视觉领域里使用对比学习的一个里程碑式的工作。而对比学习作为从 19 年开始一直到现在视觉领域乃至整个机器学习领域里最炙…...
![](https://img-blog.csdnimg.cn/d0ddb2f6a5ea4b078a6f4b55a47f9ee8.jpeg#pic_center)
【数据结构】排序算法的稳定性分析
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...
![](https://img-blog.csdnimg.cn/img_convert/a7db822547ede3a17e970c4f8ce5d113.png)
Redis AOF持久化和ReWrite
前言 Redis 的 RDB 持久化机制简单直接,把某一时刻的所有键值对以二进制的方式写入到磁盘,特点是恢复速度快,尤其适合数据备份、主从复制场景。但如果你的目的是要保证数据可靠性,RDB 就不太适合了,因为 RDB 持久化不…...
Flink学习之旅:(一)Flink部署安装
1.本地搭建 1.1.下载Flink 进入Flink官网,点击Downloads 往下滑动就可以看到 Flink 的所有版本了,看自己需要什么版本点击下载即可。 1.2.上传解压 上传至服务器,进行解压 tar -zxvf flink-1.17.1-bin-scala_2.12.tgz -C ../module/ 1.3.启…...
![](https://img-blog.csdnimg.cn/64a6eba854514ec7a51fc9a107517990.png)
Go语言入门心法(六): HTTP面向客户端|服务端编程
Go语言入门心法(一): 基础语法 Go语言入门心法(二): 结构体 Go语言入门心法(三): 接口 Go语言入门心法(四): 异常体系 Go语言入门心法(五): 函数 一:go语言面向web编程认知 Go语言的最大优势在于并发与性能,其性能可以媲美C和C,并发在网络编程中更是至关重要 使用http发送请…...
![](https://www.ngui.cc/images/no-images.jpg)
为什么非const静态成员变量一定要在类外定义
当我们如下声明了一个类: class A{public:static int sti_data;// 这个语句在c11前不能通过编译,在c11的新标准下,已经能够在声明一个普通变量是就对其进行初始化。int a 10;static const int b 1;//...其他member };// 在类外…...
![](https://img-blog.csdnimg.cn/4b0b9d6eeae0451db0cafb9f19431781.jpeg#pic_center)
千兆光模块和万兆光模块的区别?
在网络通信领域,千兆光模块和万兆光模块是最为常见且广泛应用的两种光模块。不同之处在于传输速率、封装、传输距离、功耗、发射光功率、接收光功率和应用场景等。 千兆光模块的传输速率为1 Gbps,万兆光模块的传输速率为10 Gbps,这意味着万…...
![](https://img-blog.csdnimg.cn/69f7bdcc50e144c5b2de44bcdafa5a59.png)
中断:Zynq Uart中断的流程和例程~UG585的CH.19
Zynq里的uart UART 控制器是全双工异步接收器和发送器,支持多种可编程波特率和 I/O 信号格式。该控制器可以适应自动奇偶校验生成和多主机检测模式。 UART 操作由配置和模式寄存器控制。使用状态、中断状态和调制解调器状态寄存器读取 FIFO、调制解调器信号…...
![](https://img-blog.csdnimg.cn/img_convert/77892acd78f3371931b5792de074c43d.png)
计算机补码能够减法转加法的原因
...
![](/images/no-images.jpg)
黑龙江省建设教育信息网网站/网址提交
在解析xml时,经常因为文件中含特殊字符而解析失败。原因有两个:一是内容中含有XML预定义好的实体,二是内容中含有低位非打印字符。 1.内容中含有xml预定好的实体,如“<”和“&”,对xml来说是禁止使用的…...
![](/images/no-images.jpg)
ih5 做视频网站/贵阳网站建设制作
??正想点击一个在线同学的头像,电话铃响了,一看号码,生疏的数字串。按键接听,虽然不大熟习的男中音,所传来的欢乐而冲动的音符却使我捕到了久违的欢喜信息!那语气,企业宣传片 ,只能是亲朋好友…...
![](/images/no-images.jpg)
做竞价的网站需要做外部链接吗/seo网站培训班
在Qt4中的desinger中涉及到控件Q3ListBox,但是在make的时候出现提示错误,是说无法解析到外部符号等等。 原因是:因为这个是Qt3的控件,Qt4并没有做到很好的支持,所以必须加上QT3的suuport 在.pro文件中加入一行…...
![](https://images2015.cnblogs.com/blog/256716/201512/256716-20151215212952693-665759376.jpg)
吴忠网站建设/沈阳关键词推广
你是怎么调试 JavaScript 程序的?最原始的方法是用 alert() 在页面上打印内容,稍微改进一点的方法是用 console.log() 在 JavaScript 控制台上输出内容。嗯~,用这两种土办法确实解决了很多小型 JavaScript 脚本的调试问题。不过放着 Chrome 中…...
![](https://yqfile.alicdn.com/img_405b18b4b6584ae338e0f6ecaf736533.gif)
自己做网站升seo/如何快速推广自己的品牌
由于人员的不段增加varchar(5000)已经不能满足需求,现在的方案是把字段类型由varchar改为text 1 --修改短信人员字段 2 alter table T_BAS_SendMessage alter column [Content] text 3 alter table T_BAS_SendMessage alter column ReceiveInsideName text 4 alter …...
![](https://img-blog.csdnimg.cn/img_convert/00e27ab806e4881f8254fe7ae8741834.png)
网站增加关键词/营销qq下载
满意答案来欧冠03002017.04.23采纳率:57% 等级:8已帮助:211人从API 8开始,新增了一个类:android.media.ThumbnailUtils这个类提供了3个静态方法一个用来获取第一帧得到的Bitmap,2个对图片进行缩略处理。…...