1.首先框架服务于业务,业务中很难避免的问题——逻辑复用,同样的逻辑功能同样的组件,在不一样的场景下我们不得去写2+次,避免耦合,出现了minix, render props、高阶组件实现逻辑可复用,但是都有一些副作用。
-
minix都有相同依赖会产生冲突,继续的增加state降低了可预测性。
-
高阶组件层层包裹组件,提高了复杂度和代码可读性对于外层是一个黑盒
-
render props 使用过多影响性能,不好维护,一样会嵌套很深
-
而Hooks使用函数式组件,实现了复杂逻辑的内部封装 -
逻辑代码的复用
-
减小了代码体积
-
没有 this 的烦恼
2.Hoos原理
- React Hook 底层是基于链表实现,调用的条件是每次组件被 render 的时候都会顺序执行所有的 Hooks。
3.所解决的问题
-
函数式组件不能拥有自己的state,在hooks之前只有函数式组件都是无状态的,只能通过props来获取父组件的状态,但是hook内部提供了useState来维护函数组件内部的状态。
-
函数组件中不能监听组件的生命周期。useEffect聚合了多个生命周期函数。
-
class组件中生命周期较为复杂(在15版本到16版本的变化大)。
-
class组件逻辑难以复用(HOC,render props)。
4.hooks的好处
- 写法简介
- 更方便的清除副作用
- 逻辑复用方便,class呢有HOC以及render props。react hooks则使用新建新的hooks来解决
5.组件优化
- hooks 使用 useMemo useCallBack
- class使用PureComponent