UNPKG

@restart/hooks

Version:

A set of utility and general-purpose React hooks.

33 lines (32 loc) 869 B
import { useMemo } from 'react'; const toFnRef = ref => !ref || typeof ref === 'function' ? ref : value => { ref.current = value; }; export function mergeRefs(refA, refB) { const a = toFnRef(refA); const b = toFnRef(refB); return value => { if (a) a(value); if (b) b(value); }; } /** * Create and returns a single callback ref composed from two other Refs. * * ```tsx * const Button = React.forwardRef((props, ref) => { * const [element, attachRef] = useCallbackRef<HTMLButtonElement>(); * const mergedRef = useMergedRefs(ref, attachRef); * * return <button ref={mergedRef} {...props}/> * }) * ``` * * @param refA A Callback or mutable Ref * @param refB A Callback or mutable Ref * @category refs */ function useMergedRefs(refA, refB) { return useMemo(() => mergeRefs(refA, refB), [refA, refB]); } export default useMergedRefs;