框架篇-面试题7-React中hooks的优缺点是什么
迪丽瓦拉
2025-05-30 13:07:49
0

e61362e229eae51b724f6f7046e24517.png

react中,hooks是一个非常抽象的概念,对初学者,往往不是很友好,比较一下Reacthooks的优缺点

优点

[1]. 代码的可读性强,使用hooks之前,发布/订阅自定义事件需要挂载到componentDidMount生命周期上面,然后需要在componentWillUnmount生命周期中清除,在使用hooks之后,通过useEffect,可以把componentDidMount生命周期,componentDidUpdate生命周期,还有componentWillUnmount生命周期集中在一起,方便代码的维护

[2]. 组件的层级更浅,在使用hooks之前,通常使用高阶组件Hoc的方法来实现多个组件共用状态,增强组件的功能,这样是增加了组件渲染的开销,影响了性能,但是在Hooks中可以使用自定义hooks组件useXXx()的方法将多个组件之间共用的状态放到自定义hooks就可以轻松的做到状态的共享

[3]. 不用在考虑class类组件this的指向问题了,在hooks组件中不需要使用this.state来获取数据和方法了

[4]. 可以从组件中提取状态逻辑,使得这些逻辑可以单独测试并复用,Hook使你在无需修改组件结构的情况下复用状态逻辑,这使得在组件间共享Hook变得更便捷,也就是可以大大减少冗余的代码,尤其是针对那些需要复用逻辑的场景

[5]. 没有破坏性改动,Hook不会影响对React概念的理解,Hook为已知的React概念提供了更直接的API,props,state,context,refs以及生命周期,同时Hook提供了一种强大的方式来组合它们

[6]. 更易于测试: 由于hooks是纯JavaScript函数,因此他们易于编写单元测试并模拟

缺点

[1]. 一个useEffect里面不能写太多东西,把每个不同的功能分给多个useEffect来使用,分成多个模块,把每个功能块分开来写遵循了软件设计当中的单一职责模式,hooksuseEffect只包括conponentDidMount,componentDidUpdatecomponentWillUnmount这三个生命周期,对于其他的class类组件的生命周期却不支持

[2]. 不要在class组件中调用hook,这样是无效的,不能完全模拟类组件的生命周期,虽然可以使用useEffect hook来模拟,但是它使用起来需要更多的思考和规划

[3]. Hooks是一种新的特性,存在一些兼容性的问题,相对类组件方式,学习曲线比较陡峭,需要一些时间来适应这种编程模式

Reacthooks的优点主要是提高了代码的可读性和性能,方便代码的维护和迭代,同时也可以更好地实现状态共享,但是也需要在使用中结合具体的场景和需求来选择最合适的方式,无非就是有了hook,多了一种技术方案选择

JS面试题18-说一说网页当中性能优化有哪些性能指标,如何量化

2023-03-14

81579f09edb2b9d83291858657ad04b3.jpeg

JS面试题17-比较一下服务端渲染与客户端渲染

2023-03-12

147bb2a958085814c5253d6b99f0e2d6.jpeg

JS篇面试题16-Es6中的事件扩展符在什么场景下使用

2023-03-11

13573ced48ae0eb53fde671e96469064.jpeg

JS篇面试题16-Es6中的事件扩展符在什么场景下使用

2023-03-10

f637c3cd9fe13388a5718a811d034729.jpeg

框架篇-面试题6-说一下Vue2与Vue3的钩子函数

2023-03-09

ed052255bce12b84752e8e34fa47c1b9.jpeg

一文了解互联网中的运营

2023-03-03

561402577144638bb9f992802841a610.jpeg

从改简历到面试需要知道的

2023-03-02

5c153e02cae11bdaf783182cd8c5b028.jpeg

入职前-求职者一定要提前了解的问题

2023-03-01

3ef840ce62d88899168b2bcf83378c70.jpeg

抄代码你总会吧?ChatGPT手把手教你写代码

2023-03-17

1cbf3b3325480a7bce4bdba265139f5f.jpeg

今年36岁,北邮硕士毕业,待过字节,阿里,最近被裁员,只能去外包

2023-03-17

ce5fb1fec04f177b3338c8d899d28edb.jpeg

8ca955909237fa1c61b0cfb205a4128a.jpeg

841317d1e473e1780d75844144b911b2.png

点击左下角查看更多

ecd231ea2316cacab231d7c3fbae0fc4.gif

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
A.机器学习入门算法(三):基... 机器学习算法(三):K近邻(k-nearest neigh...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
有限元三角形单元的等效节点力 文章目录前言一、重新复习一下有限元三角形单元的理论1、三角形单元的形函数(Nÿ...
Redis 所有支持的数据结构... Redis 是一种开源的基于键值对存储的 NoSQL 数据库,支持多种数据结构。以下是...
win下pytorch安装—c... 安装目录一、cuda安装1.1、cuda版本选择1.2、下载安装二、cudnn安装三、pytorch...
MySQL基础-多表查询 文章目录MySQL基础-多表查询一、案例及引入1、基础概念2、笛卡尔积的理解二、多表查询的分类1、等...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
MATLAB | 全网最详细网... 一篇超超超长,超超超全面网络图绘制教程,本篇基本能讲清楚所有绘制要点&#...
IHome主页 - 让你的浏览... 随着互联网的发展,人们越来越离不开浏览器了。每天上班、学习、娱乐,浏览器...
TCP 协议 一、TCP 协议概念 TCP即传输控制协议(Transmission Control ...
营业执照的经营范围有哪些 营业执照的经营范围有哪些 经营范围是指企业可以从事的生产经营与服务项目,是进行公司注册...
C++ 可变体(variant... 一、可变体(variant) 基础用法 Union的问题: 无法知道当前使用的类型是什...
血压计语音芯片,电子医疗设备声... 语音电子血压计是带有语音提示功能的电子血压计,测量前至测量结果全程语音播报࿰...
MySQL OCP888题解0... 文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析2.2、选项解析3、知识点3...
【2023-Pytorch-检... (肆十二想说的一些话)Yolo这个系列我们已经更新了大概一年的时间,现在基本的流程也走走通了,包含数...
实战项目:保险行业用户分类 这里写目录标题1、项目介绍1.1 行业背景1.2 数据介绍2、代码实现导入数据探索数据处理列标签名异...
记录--我在前端干工地(thr... 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前段时间接触了Th...
43 openEuler搭建A... 文章目录43 openEuler搭建Apache服务器-配置文件说明和管理模块43.1 配置文件说明...