React—函数组件和类组件的选择

160 阅读2分钟

一个React项目,我们使用组件,应该使用函数组件,还是类组件好呢?

这个问题,经常刷面试题的同学应该很熟悉,面试官很喜欢的一个问题,那么,抛开“应试”,我们实际项目中,应该如何选择函数组件类组件呢?

函数组件和类组件的区别

选择组件前,应该先了解这两个组件有什么区别,它们的不同点都不知道的话,又怎么判断应该使用什么组件呢?

注:函数组件和类组件是可以相互替代的

颗粒度(大:宏观、小:微观,细节)

函数组件颗粒度更小(更微观、细节),是函数式编程的有限选择

颗粒度体现在state定义与useEffect、useLayoutEffect上,函数组件可以写多个,也可以拆成自定义hook调用。但是相比之下,类组件的state和每个生命周期函数在组件中都最多能用一次,拆到组件外也比较繁琐。

实例

类组件有实例,如果需要用到实例的话,类组件是首选。

复用状态逻辑

函数组件和类组件都可以复用状态逻辑。

类组件可以通过hoc、render props,但是容易形成嵌套地狱,参考antd3 form的createForm和react-redux的connect一起用在一个组件里的时候,四层括号,但是函数组件用一个自定义hook就完事了,例如antd4 form的uesForm

学习成本

类组件有this,合成事件中可能会比较难以理解,但是函数组件并没有这种设计,上手简单 关于this的指向问题,一直是个需要理解的重点,不光是React,比如在VUE,原生JS上都会有遇到this指向问题,this指向的问题是迟早都要攻克的。

总结

两种都要掌握,只有掌握了,并且知道它们的区别,才可以根据不同的项目,不同的场景,不同的需求选择不同的组件