Skip to content

Commit cff2bf0

Browse files
committed
feat: enhance DOM judgment
fix: alibaba#2702
1 parent c7bb04c commit cff2bf0

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

packages/hooks/src/utils/dom.ts

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* Thx rc-util
3+
* copied from https://github.com/react-component/util/blob/v5.44.3/src/Dom/findDOMNode.ts#L4-L23
4+
*/
5+
6+
export function isDOM(node: any): node is HTMLElement | SVGElement {
7+
// https://developer.mozilla.org/en-US/docs/Web/API/Element
8+
// Since XULElement is also subclass of Element, we only need HTMLElement and SVGElement
9+
return node instanceof HTMLElement || node instanceof SVGElement;
10+
}
11+
12+
/**
13+
* Retrieves a DOM node via a ref, and does not invoke `findDOMNode`.
14+
*/
15+
export function getDOM(node: any): HTMLElement | SVGElement | null {
16+
if (node && typeof node === 'object' && isDOM(node.nativeElement)) {
17+
return node.nativeElement;
18+
}
19+
20+
if (isDOM(node)) {
21+
return node as any;
22+
}
23+
24+
return null;
25+
}

packages/hooks/src/utils/domTarget.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { MutableRefObject } from 'react';
22
import { isFunction } from './index';
33
import isBrowser from './isBrowser';
4+
import { getDOM } from './dom';
45

56
type TargetValue<T> = T | undefined | null;
67

@@ -30,5 +31,5 @@ export function getTargetElement<T extends TargetType>(target: BasicTarget<T>, d
3031
targetElement = target;
3132
}
3233

33-
return targetElement;
34+
return getDOM(targetElement) ?? defaultElement;
3435
}

0 commit comments

Comments
 (0)