Hook 是 React 在16.8版本以后提出的,它的出现主要是为了可以让我们在不实用类组件时也能使用state以及其他的React的功能。
React出现的原因:
1. 组件之间复用状态逻辑很难
当组件之间需要共享一些状态时,就会在状态管理中出现很多相关的逻辑代码。一般会使用高阶组件或者renderPropos来处理这些逻辑的复用。但是这两种方法都有缺点(本处不再详细描述),所以使用Hook来处理这些逻辑。Hook相对以上两种方法有以下优点:
写法简单
组合简单
容易扩展
没有Wrapper hell
2. 复杂的组件可读性差
如果一个组件的逻辑很复杂,就有可能导致每个生命周期包含一些不相关的代码。而Hook可以讲组件中相互关联的部分拆的颗粒度更小,似的代码更简洁,结果也更加可预测。
3. Class组件现存的一些问题
class组件中this的复杂性以及生命周期函数的不确定性都使得class组件是一个难以使用的存在。想要使用函数组件却没有对应的状态管理,所以Hook就实现了一些和生命周期函数类似的功能,解决了以上问题。
如何定义自己的Hook
自定义 Hook 是一个函数,其名称以 “use” 开头,函数内部可以调用其他的 Hook,自定义 Hook 是一种自然遵循 Hook 设计的约定,而并不是 React 的特性(需要注意的是自定义hook需要以use开头,useState(),useContext(),useReducer(),useEffect()是react自带的钩子)。