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。