@yamada-ui/react
Version:
React UI components of the Yamada, by the Yamada, for the Yamada built with React and Emotion
40 lines (38 loc) • 989 B
JavaScript
import * as React from "react";
import { isObject } from "@yamada-ui/utils";
//#region src/utils/ref.ts
function isRefObject(val) {
return isObject(val) && "current" in val;
}
function assignRef(ref, value) {
if (ref == null) return;
if (typeof ref === "function") {
ref(value);
return;
}
try {
ref.current = value;
} catch {
throw new Error(`Cannot assign value '${value}' to ref '${ref}'`);
}
}
function mergeRefs(...refs) {
return function(node) {
return refs.forEach((ref) => {
assignRef(ref, node);
});
};
}
function useMergeRefs(...refs) {
return React.useMemo(() => mergeRefs(...refs), [refs]);
}
function useCallbackRef(callback, deps = []) {
const callbackRef = React.useRef(callback);
React.useEffect(() => {
callbackRef.current = callback;
});
return React.useCallback(((...args) => callbackRef.current?.(...args)), deps);
}
//#endregion
export { assignRef, isRefObject, mergeRefs, useCallbackRef, useMergeRefs };
//# sourceMappingURL=ref.js.map