@@ -2,10 +2,10 @@ import Portal from '@rc-component/portal';
2
2
import classNames from 'classnames' ;
3
3
import type { CSSMotionProps } from 'rc-motion' ;
4
4
import ResizeObserver from 'rc-resize-observer' ;
5
+ import { isDOM } from 'rc-util/lib/Dom/findDOMNode' ;
5
6
import useEvent from 'rc-util/lib/hooks/useEvent' ;
6
7
import useId from 'rc-util/lib/hooks/useId' ;
7
8
import useLayoutEffect from 'rc-util/lib/hooks/useLayoutEffect' ;
8
- import { isDOM } from 'rc-util/lib/Dom/findDOMNode' ;
9
9
import * as React from 'react' ;
10
10
import type { TriggerContextProps } from './context' ;
11
11
import TriggerContext from './context' ;
@@ -214,23 +214,23 @@ export function generateTrigger(
214
214
const id = useId ( ) ;
215
215
const [ popupEle , setPopupEle ] = React . useState < HTMLDivElement > ( null ) ;
216
216
217
- const setPopupRef = React . useCallback ( ( node : HTMLDivElement ) => {
218
- if ( isDOM ( node ) ) {
217
+ const setPopupRef = useEvent ( ( node : HTMLDivElement ) => {
218
+ if ( isDOM ( node ) && popupEle !== node ) {
219
219
setPopupEle ( node ) ;
220
220
}
221
221
222
222
parentContext ?. registerSubPopup ( id , node ) ;
223
- } , [ ] ) ;
223
+ } ) ;
224
224
225
225
// =========================== Target ===========================
226
226
// Use state to control here since `useRef` update not trigger render
227
227
const [ targetEle , setTargetEle ] = React . useState < HTMLElement > ( null ) ;
228
228
229
- const setTargetRef = React . useCallback ( ( node : HTMLElement ) => {
230
- if ( isDOM ( node ) ) {
229
+ const setTargetRef = useEvent ( ( node : HTMLElement ) => {
230
+ if ( isDOM ( node ) && targetEle !== node ) {
231
231
setTargetEle ( node ) ;
232
232
}
233
- } , [ ] ) ;
233
+ } ) ;
234
234
235
235
// ========================== Children ==========================
236
236
const child = React . Children . only ( children ) as React . ReactElement ;
0 commit comments