UNPKG

@restart/hooks

Version:

A set of utility and general-purpose React hooks.

33 lines (32 loc) 845 B
import { useLayoutEffect, useRef } from 'react'; /** * Runs a layout effect only when the dependencies have changed, skipping the * initial "on mount" run. Caution, if the dependency list never changes, * the effect is **never run** * * ```ts * const ref = useRef<HTMLInput>(null); * * // focuses an element only if the focus changes, and not on mount * useUpdateLayoutEffect(() => { * const element = ref.current?.children[focusedIdx] as HTMLElement * * element?.focus() * * }, [focusedIndex]) * ``` * @param effect An effect to run on mount * * @category effects */ function useUpdateLayoutEffect(fn, deps) { const isFirst = useRef(true); useLayoutEffect(() => { if (isFirst.current) { isFirst.current = false; return; } return fn(); }, deps); } export default useUpdateLayoutEffect;