在react
中,hooks
是一个非常抽象的概念,对初学者,往往不是很友好,比较一下React
中hooks
的优缺点
[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
来使用,分成多个模块,把每个功能块分开来写遵循了软件设计当中的单一职责模式,hooks
的useEffect
只包括conponentDidMount
,componentDidUpdate
和componentWillUnmount
这三个生命周期,对于其他的class
类组件的生命周期却不支持
[2]. 不要在class
组件中调用hook
,这样是无效的,不能完全模拟类组件的生命周期,虽然可以使用useEffect hook
来模拟,但是它使用起来需要更多的思考和规划
[3]. Hooks
是一种新的特性,存在一些兼容性的问题,相对类组件方式,学习曲线比较陡峭,需要一些时间来适应这种编程模式
React
中hooks
的优点主要是提高了代码的可读性和性能,方便代码的维护和迭代,同时也可以更好地实现状态共享,但是也需要在使用中结合具体的场景和需求来选择最合适的方式,无非就是有了hook
,多了一种技术方案选择
JS面试题18-说一说网页当中性能优化有哪些性能指标,如何量化
2023-03-14
JS面试题17-比较一下服务端渲染与客户端渲染
2023-03-12
JS篇面试题16-Es6中的事件扩展符在什么场景下使用
2023-03-11
JS篇面试题16-Es6中的事件扩展符在什么场景下使用
2023-03-10
框架篇-面试题6-说一下Vue2与Vue3的钩子函数
2023-03-09
一文了解互联网中的运营
2023-03-03
从改简历到面试需要知道的
2023-03-02
入职前-求职者一定要提前了解的问题
2023-03-01
抄代码你总会吧?ChatGPT手把手教你写代码
2023-03-17
今年36岁,北邮硕士毕业,待过字节,阿里,最近被裁员,只能去外包
2023-03-17
点击左下角查看更多