vuecssuiant-designantdreactantantd-vueenterprisefrontendui-designvue-antdvue-antd-uivue3vuecomponent
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.
31 lines
619 B
31 lines
619 B
export interface RefObject extends Function { |
|
current?: any; |
|
} |
|
|
|
function createRef(): any { |
|
const func: RefObject = (node: any) => { |
|
func.current = node; |
|
}; |
|
return func; |
|
} |
|
|
|
export function fillRef<T>(ref, node: T) { |
|
if (typeof ref === 'function') { |
|
ref(node); |
|
} else if (typeof ref === 'object' && ref && 'current' in ref) { |
|
(ref as any).current = node; |
|
} |
|
} |
|
|
|
/** |
|
* Merge refs into one ref function to support ref passing. |
|
*/ |
|
export function composeRef<T>(...refs: any[]) { |
|
return (node: T) => { |
|
refs.forEach(ref => { |
|
fillRef(ref, node); |
|
}); |
|
}; |
|
} |
|
|
|
export default createRef;
|
|
|