实际react-hooks也并没有那么难以理解,听起来很cool,实际就是函数组件解决没有state,生命周期,逻辑不能复用的一种技术方案。
对于class组件,我们只需要实例化一次,实例中保存了组件的state等状态。对于每一次更新只需要调用render方法就可以。但是在function组件中,每一次更新都是一次新的函数执行,为了保存一些状态,执行一些副作用钩子,react-hooks应运而生,去帮助记录组件的状态,处理一些额外的副作用。
搞懂几个问题
- 在无状态组件每一次函数上下文执行的时候,react用什么方式记录了hooks的状态?
- 多个react-hooks用什么来记录每一个hooks的顺序的 ? 换个问法!为什么不能条件语句中,声明hooks? hooks声明为什么在组件的最顶部?
- function函数组件中的useState,和 class类组件 setState有什么区别?
- react 是怎么捕获到hooks的执行上下文,是在函数组件内部的?
- useEffect,useMemo 中,为什么useRef不需要依赖注入,就能访问到最新的改变值?
- useMemo是怎么对值做缓存的?如何应用它优化性能?
- 为什么两次传入useState的值相同,函数组件不更新?
关于useMemo的使用场景
使用 function 的形式来声明组件,失去了shouldCompnentUpdate(在组件更新之前)这个生命周期,也就是说我们没有办法通过组件更新前条件来决定组件是否更新。
而且在函数组件中,也不再区分mount和update两个状态,这意味着函数组件的每一次调用都会执行内部的所有逻辑,就带来了非常大的性能损耗。
useMemo和useCallback都是解决上述性能问题的。