@i-novus/ui-core
Version:
Базовые UI компоненты
25 lines (24 loc) • 758 B
JavaScript
import { useMemo } from 'react';
function assignToRef(ref, node) {
if (typeof ref === 'function') {
ref(node);
}
else if (typeof ref === 'object' && ref && 'current' in ref) {
// eslint-disable-next-line no-param-reassign
ref.current = node;
}
}
function mergeRefs(...refs) {
return (node) => {
refs.forEach((ref) => {
assignToRef(ref, node);
});
};
}
/**
* Хук для мержа рефов. Может быть использован для мержа внутреннего и forward рефов компонента
*/
export function useComposeRef(...refs) {
// eslint-disable-next-line react-hooks/exhaustive-deps
return useMemo(() => mergeRefs(...refs), refs);
}