react中的常用hook

useState

状态是变化的数据,是组件甚至前端应用的核心。useState有传入值和函数两个参数,返回的setState也有传入值和传入函数两种参数。

useEffect

副作用effect函数是在渲染之外额外执行的一些逻辑。它是根据第二个参数的依赖数组是否变化来决定是否执行effect,可以返回一个清理函数,在下一次effect执行前执行。

useLayoutEffect

作用与useEffect差不多,但是useEffect的effect函数是异步进行的,所以中间有次渲染,中间可能会有闪屏。而useLayoutEffect是同步执行的,所以中间不会闪屏,但计算量大的话会导致掉帧。

useReducer

用来封装一些修改状态的逻辑到reducer,通常setState也能胜任,但是当需要多次使用逻辑时,setState需要书写多次逻辑,使用useReducer就不需要书写多次逻辑代码,直接封装成reducer,通过action触发。当修改深层对象时,创建新对象较麻烦,可以结合使用immer。

useRef

可以用来存储dom引用或者其他内容,通过xxRef.current来取,改变它的内容不会触发重新渲染。

forwardRef + useImperativeHandle

通过forwardRef 可以从子组件转发ref到父组件,如果想要自定义ref内容可以使用useImperativeHandle。

useContext

跨层组件之间传递数据可以使用useContext。用createContext创建Context对象,用provider修改其中的值,function组件用useContext的hook来取值,class组件用Consumer来取值。

memo + useMemo + useCallback

memo包裹的组件只有在props变的时候才会重新渲染,useMemo、useCallback可以防止props不必要的变化,两者一般是结合使用。不过用来当做缓存计算结果等场景的时候,也可以单独用useMemo、useCallback。