一个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指向的问题是迟早都要攻克的。
总结
两种都要掌握,只有掌握了,并且知道它们的区别,才可以根据不同的项目,不同的场景,不同的需求选择不同的组件