Skip to main content

HookUse

Hook Usage Breif Summary

useState

Lazy initial state, change state will trigger render()

Hook internally uses Object.is to compare whether the new/old states are equal.

useEffect

Executed after the first render and after each update.

useEffect = componentDidMounted + componentWillUnmount + componentDidUpdate

​ = useEffect(() => void, []); + useEffect(() => fn, []); + useEffect(() => {}, [dev1]);

useReducer

Requires multiple uses of useState.

useContext

Components at different levels need to access the same amount of data.

useCallback

Inside the component, methods that will become dependencies on other useEffects are recommended to be wrapped in useCallback, or written directly in the useEffect that references it This is usually the case with functions such as reset and so on, and possibly multiple places where this function is called. If your function will be passed to the child component as props, be sure to use the useCallback wrapper. For the child component, it can be very annoying if each render causes the function you pass to change. Also not good for react to do rendering optimization.

useMemo

Some calculations have a lot of overhead, so we need to "remember" the return value to avoid re-calculating it every time we render. We also need to "remember" the value when the downstream component is re-rendered due to a change in the reference of the value.

useRef

The ref object returned by useRef remains the same for the lifetime of the component, meaning that the ref object returned is the same each time the function component is re-rendered (with React.createRef, the ref is recreated each time the component is re-rendered). Conceptually, you can think of refs as being like instance variables of a class.

forwardRef

Because function components do not have instances, function components cannot receive ref attributes like class components. In order to make function components accept ref attributes like class components, we need to wrap function components with forwardRef so that function components can accept ref attributes, and the wrapped components will not pass in ref attributes as props.

useImperativeHandle

Sometimes we want to execute some methods provided by the child component in the parent component. In the class component we can get the child component by ref and then execute the methods in the child component (which is also a class component), but in the function component we can't do that. Because there is no this in the function component, we can't get the methods in the function's subcomponents. At this point we can use useImperativeHandle with forwardRef

useLayoutEffect

The function signature is the same as useEffect, but it calls effect synchronously after all DOM changes. you can use it to read the DOM layout and trigger re-rendering synchronously. The update schedule inside useLayoutEffect will be refreshed synchronously before the browser performs the drawing