Dashboard sipadu mbip
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

useMergedRefs.js 921B

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { useMemo } from 'react';
  2. var toFnRef = function toFnRef(ref) {
  3. return !ref || typeof ref === 'function' ? ref : function (value) {
  4. ref.current = value;
  5. };
  6. };
  7. export function mergeRefs(refA, refB) {
  8. var a = toFnRef(refA);
  9. var b = toFnRef(refB);
  10. return function (value) {
  11. if (a) a(value);
  12. if (b) b(value);
  13. };
  14. }
  15. /**
  16. * Create and returns a single callback ref composed from two other Refs.
  17. *
  18. * ```tsx
  19. * const Button = React.forwardRef((props, ref) => {
  20. * const [element, attachRef] = useCallbackRef<HTMLButtonElement>();
  21. * const mergedRef = useMergedRefs(ref, attachRef);
  22. *
  23. * return <button ref={mergedRef} {...props}/>
  24. * })
  25. * ```
  26. *
  27. * @param refA A Callback or mutable Ref
  28. * @param refB A Callback or mutable Ref
  29. */
  30. function useMergedRefs(refA, refB) {
  31. return useMemo(function () {
  32. return mergeRefs(refA, refB);
  33. }, [refA, refB]);
  34. }
  35. export default useMergedRefs;