diff --git a/src/Dialog/Content/index.tsx b/src/Dialog/Content/index.tsx index 665de5bf..e0cfbba2 100644 --- a/src/Dialog/Content/index.tsx +++ b/src/Dialog/Content/index.tsx @@ -33,9 +33,20 @@ const Content = React.forwardRef((props, ref) => { } = props; const dialogRef = useRef<{ nativeElement: HTMLElement } & CSSMotionStateRef>(null); - const panelRef = useRef(null); + // Force remount CSSMotion when visible changes from false to false + // This handles React.Activity scenarios where component state is preserved + const [motionKey, setMotionKey] = React.useState(0); + const prevVisibleRef = useRef(visible); + + React.useEffect(() => { + if (!visible && !prevVisibleRef.current) { + setMotionKey(k => k + 1); + } + prevVisibleRef.current = visible; + }, [visible]); + // ============================== Refs ============================== React.useImperativeHandle(ref, () => ({ ...panelRef.current, @@ -64,6 +75,7 @@ const Content = React.forwardRef((props, ref) => { // ============================= Render ============================= return (