语法不同、设计思想不同。
- 函数式组件是函数式编程思想,而类组件是面向对象编程思想。面向对象编程将属性和方法都封装起来了,屏蔽了很多细节,不利于测试。
生命周期、状态变量
-
类式组件:使用state对象定义状态变量,componentDidMount、componentDidUpdate、shouldComponentUpdate等生命周期钩子函数。
-
函数组件:没有this,试用了一系列的内置hooks实现对应的功能,比如使用useState创建状态变量,使用useEffect实现类似于componentDidMount、componentDidUpdate 等生命周期钩子函数功能。
复用性
- 类式组件:使用了hoc(高阶组件)、render props 实现组件的逻辑复用、扩展组件的功能。
- 函数组件:使用自定义hooks实现组件的逻辑复用。
优缺点
-
函数组件
优点:
- 相对于类组件 代码量少,代码更简洁,可读性更强。
- 更易于拆分组件和测试。
缺点:
- 在业务逻辑很复杂 ,状态依赖关系错乱的情况下,使用useEffect、useMemo等hooks,对其依赖项的思考给开发者带来更大的心理负担。
- 不具备处理错误边界等业务情况的hooks。
-
类组件
优点:
- 功能完善,具有componentDidsCatch、getDerivedStateFromError 等钩子函数处理边界错误。
缺点:
-
在复用性上,hoc组件会出现嵌套地狱,重名props被覆盖,难以拆分和测试等问题。