(可读性强、组件层级变得更浅、不用再考虑class组件中的this指向、部分一些生命周期不支持)
优点
代码的可读性强,在使用hooks之前的发布/订阅自定义事件都需要挂载到componentDidmount生命周期上
面,然后需要在componentWillunmount生命周期中写清楚,这样不便于开发者的维护和迭代。在使用
hooks之后,通过useEffect,可以把componentDidmount生命周期、componentDiaUpdata生命周期,
还有componentWillUnmount生命周期集中在一起,方便代码的维护。
组件层级更浅了,在使用hooks之前通常都是使用高阶组件HOC的方法来复用多个组件公共的状态,增强
组件的功能,这样是增加了组件渲染的的开销,影响了性能。
但是在hooks中可以使用自定义hooks组件useXxx()的方法将多个组件之间公共的状态放到自定义hooks里
就可以轻松做到状态共享(自定义hooks需要以use开头,按照驼峰命名来自定义,自定义hooks必须在函数式组件中调用)
不用再考虑class类组件this指向的问题了,hooks组件中不需要使用this.state和this.fn来获取数据和
方法了
缺点
hooks的useEffect只包括了componentDidMount,componentDidUpdate和componentWillUnmount这三
个生命周期,对于其他的class类组件的生命周期则是不支持
注意事项
一个useEffect里不能写太多的东西,把每个不同的功能分多个useEffect来使用,分成多个模块,把每个
功能块分开来写遵循了软件设计的'单一职责模式'。hooks的出现并不是取代了class组件,而是在函数
组件的基础上实现一部分class类组件的功能,不要在class组件中调用hook,这样是无效的
函数式组件和类组件的区别
函数式组件没有生命周期和this,state
class类有生命周期和this,和state
函数式组件改变state: React.Hooks : useState
类组件改变state:this.setState()
函数组件性能高不用实例化
类组件性能低需要实例化