@@ -40,15 +40,22 @@ const Drawer: React.FC<DrawerProps> = props => {
40
40
warnCheck ( props ) ;
41
41
}
42
42
43
+ // ============================= Open =============================
44
+ const [ internalOpen , setInternalOpen ] = React . useState ( false ) ;
45
+
46
+ useLayoutEffect ( ( ) => {
47
+ setInternalOpen ( open ) ;
48
+ } , [ open ] ) ;
49
+
43
50
// ============================ Focus =============================
44
51
const panelRef = React . useRef < HTMLDivElement > ( ) ;
45
52
46
53
const lastActiveRef = React . useRef < HTMLElement > ( ) ;
47
54
useLayoutEffect ( ( ) => {
48
- if ( open ) {
55
+ if ( internalOpen ) {
49
56
lastActiveRef . current = document . activeElement as HTMLElement ;
50
57
}
51
- } , [ open ] ) ;
58
+ } , [ internalOpen ] ) ;
52
59
53
60
// ============================= Open =============================
54
61
const internalAfterOpenChange : DrawerProps [ 'afterOpenChange' ] =
@@ -66,13 +73,13 @@ const Drawer: React.FC<DrawerProps> = props => {
66
73
} ;
67
74
68
75
// ============================ Render ============================
69
- if ( ! forceRender && ! animatedVisible && ! open && destroyOnClose ) {
76
+ if ( ! forceRender && ! animatedVisible && ! internalOpen && destroyOnClose ) {
70
77
return null ;
71
78
}
72
79
73
80
const drawerPopupProps = {
74
81
...props ,
75
- open,
82
+ open : internalOpen ,
76
83
prefixCls,
77
84
placement,
78
85
autoFocus,
@@ -87,10 +94,10 @@ const Drawer: React.FC<DrawerProps> = props => {
87
94
88
95
return (
89
96
< Portal
90
- open = { open || forceRender || animatedVisible }
97
+ open = { internalOpen || forceRender || animatedVisible }
91
98
autoDestroy = { false }
92
99
getContainer = { getContainer }
93
- autoLock = { mask && ( open || animatedVisible ) }
100
+ autoLock = { mask && ( internalOpen || animatedVisible ) }
94
101
>
95
102
< DrawerPopup { ...drawerPopupProps } />
96
103
</ Portal >
0 commit comments