Octocat

Compose Refs

Compose multiple refs into a single ref.

Source Code

import type { RefCallback, RefObject } from 'react';

type Ref<T> = RefCallback<T> | RefObject<T> | null;

export function composeRefs<T>(
  ...refs: (Ref<T> | undefined)[]
): RefCallback<T> {
  return (instance: T) => {
    refs.forEach((ref) => {
      if (typeof ref === 'function') {
        ref(instance);
      } else if (ref !== null && typeof ref === 'object' && 'current' in ref) {
        (ref as RefObject<T>).current = instance;
      }
    });
  };
}

Previous

Tooltip

Next

Debounce