@@ -40,15 +40,22 @@ const Drawer: React.FC<DrawerProps> = props => {
4040 warnCheck ( props ) ;
4141 }
4242
43+ // ============================= Open =============================
44+ const [ internalOpen , setInternalOpen ] = React . useState ( false ) ;
45+
46+ useLayoutEffect ( ( ) => {
47+ setInternalOpen ( open ) ;
48+ } , [ open ] ) ;
49+
4350 // ============================ Focus =============================
4451 const panelRef = React . useRef < HTMLDivElement > ( ) ;
4552
4653 const lastActiveRef = React . useRef < HTMLElement > ( ) ;
4754 useLayoutEffect ( ( ) => {
48- if ( open ) {
55+ if ( internalOpen ) {
4956 lastActiveRef . current = document . activeElement as HTMLElement ;
5057 }
51- } , [ open ] ) ;
58+ } , [ internalOpen ] ) ;
5259
5360 // ============================= Open =============================
5461 const internalAfterOpenChange : DrawerProps [ 'afterOpenChange' ] =
@@ -66,13 +73,13 @@ const Drawer: React.FC<DrawerProps> = props => {
6673 } ;
6774
6875 // ============================ Render ============================
69- if ( ! forceRender && ! animatedVisible && ! open && destroyOnClose ) {
76+ if ( ! forceRender && ! animatedVisible && ! internalOpen && destroyOnClose ) {
7077 return null ;
7178 }
7279
7380 const drawerPopupProps = {
7481 ...props ,
75- open,
82+ open : internalOpen ,
7683 prefixCls,
7784 placement,
7885 autoFocus,
@@ -87,10 +94,10 @@ const Drawer: React.FC<DrawerProps> = props => {
8794
8895 return (
8996 < Portal
90- open = { open || forceRender || animatedVisible }
97+ open = { internalOpen || forceRender || animatedVisible }
9198 autoDestroy = { false }
9299 getContainer = { getContainer }
93- autoLock = { mask && ( open || animatedVisible ) }
100+ autoLock = { mask && ( internalOpen || animatedVisible ) }
94101 >
95102 < DrawerPopup { ...drawerPopupProps } />
96103 </ Portal >
0 commit comments