@@ -2,10 +2,10 @@ import Portal from '@rc-component/portal';
22import classNames from 'classnames' ;
33import type { CSSMotionProps } from 'rc-motion' ;
44import ResizeObserver from 'rc-resize-observer' ;
5+ import { isDOM } from 'rc-util/lib/Dom/findDOMNode' ;
56import useEvent from 'rc-util/lib/hooks/useEvent' ;
67import useId from 'rc-util/lib/hooks/useId' ;
78import useLayoutEffect from 'rc-util/lib/hooks/useLayoutEffect' ;
8- import { isDOM } from 'rc-util/lib/Dom/findDOMNode' ;
99import * as React from 'react' ;
1010import type { TriggerContextProps } from './context' ;
1111import TriggerContext from './context' ;
@@ -214,23 +214,23 @@ export function generateTrigger(
214214 const id = useId ( ) ;
215215 const [ popupEle , setPopupEle ] = React . useState < HTMLDivElement > ( null ) ;
216216
217- const setPopupRef = React . useCallback ( ( node : HTMLDivElement ) => {
218- if ( isDOM ( node ) ) {
217+ const setPopupRef = useEvent ( ( node : HTMLDivElement ) => {
218+ if ( isDOM ( node ) && popupEle !== node ) {
219219 setPopupEle ( node ) ;
220220 }
221221
222222 parentContext ?. registerSubPopup ( id , node ) ;
223- } , [ ] ) ;
223+ } ) ;
224224
225225 // =========================== Target ===========================
226226 // Use state to control here since `useRef` update not trigger render
227227 const [ targetEle , setTargetEle ] = React . useState < HTMLElement > ( null ) ;
228228
229- const setTargetRef = React . useCallback ( ( node : HTMLElement ) => {
230- if ( isDOM ( node ) ) {
229+ const setTargetRef = useEvent ( ( node : HTMLElement ) => {
230+ if ( isDOM ( node ) && targetEle !== node ) {
231231 setTargetEle ( node ) ;
232232 }
233- } , [ ] ) ;
233+ } ) ;
234234
235235 // ========================== Children ==========================
236236 const child = React . Children . only ( children ) as React . ReactElement ;
0 commit comments