@@ -28,8 +28,6 @@ export interface DrawerState {
28
28
drawerValue : Animated . ValueXY ;
29
29
overlayValue : Animated . Value ;
30
30
zIndexValue : number ;
31
- handleDrawer : ( isOpen : boolean ) => void ;
32
- control : 'props' | 'state' ;
33
31
isOpen : boolean ;
34
32
}
35
33
@@ -45,35 +43,26 @@ export default class Drawer extends Component<DrawerProps, DrawerState> {
45
43
openDrawer : ( ) => null ,
46
44
closeDrawer : ( ) => null ,
47
45
} ;
48
- private handleDrawer : ( isOpen : boolean ) => void ;
49
46
constructor ( props : DrawerProps ) {
50
47
super ( props ) ;
51
- this . handleDrawer = ( isOpen : boolean ) => {
52
- isOpen ? this . openDrawer ( ) : this . closeDrawer ( ) ;
53
- } ;
48
+
54
49
this . state = {
55
50
zIndexValue : 0 ,
56
51
overlayValue : new Animated . Value ( 0 ) ,
57
52
drawerValue : new Animated . ValueXY ( { ...this . getInitPosition ( ) } ) ,
58
- handleDrawer : this . handleDrawer ,
59
- control : 'state' ,
60
53
isOpen : ! ! props . isOpen ,
61
54
} ;
62
55
}
63
- static getDerivedStateFromProps ( props : DrawerProps , state : DrawerState ) {
64
- if ( state . control === 'state' ) {
65
- return {
66
- control : 'props' ,
67
- } ;
56
+ handleDrawer = ( isOpen : boolean ) => {
57
+ isOpen ? this . openDrawer ( ) : this . closeDrawer ( ) ;
58
+ } ;
59
+ componentDidUpdate ( prevProps : DrawerProps , prevState : DrawerState ) {
60
+ if ( prevState . isOpen !== this . state . isOpen ) {
61
+ this . handleDrawer ( this . state . isOpen ) ;
68
62
}
69
- if ( props . isOpen !== state . isOpen ) {
70
- state . handleDrawer ( ! ! props . isOpen ) ;
71
- return {
72
- isOpen : props . isOpen ,
73
- control : 'props' ,
74
- } ;
63
+ if ( prevProps . isOpen !== this . props . isOpen ) {
64
+ this . handleDrawer ( ! ! this . props . isOpen ) ;
75
65
}
76
- return null ;
77
66
}
78
67
componentDidMount ( ) {
79
68
if ( this . props . isOpen ) {
@@ -90,8 +79,8 @@ export default class Drawer extends Component<DrawerProps, DrawerState> {
90
79
this . closeDrawer ( ) ;
91
80
} ;
92
81
render ( ) {
93
- const { isOpen , style, drawerWidth, drawerBackgroundColor, maskProps, placement, drawerHeight } = this . props ;
94
- const { drawerValue, overlayValue, zIndexValue } = this . state ;
82
+ const { style, drawerWidth, drawerBackgroundColor, maskProps, placement, drawerHeight } = this . props ;
83
+ const { isOpen , drawerValue, overlayValue, zIndexValue } = this . state ;
95
84
const isTopOrBottom = placement === 'top' || placement === 'bottom' ;
96
85
const changeStyle = isTopOrBottom ? 'height' : 'width' ;
97
86
const dynamicDrawerStyles : any = {
@@ -180,7 +169,7 @@ export default class Drawer extends Component<DrawerProps, DrawerState> {
180
169
return xy ;
181
170
}
182
171
openDrawer ( ) {
183
- this . setState ( { zIndexValue : 3002 , control : 'state' } ) ;
172
+ this . setState ( { zIndexValue : 3002 , isOpen : true } ) ;
184
173
Animated . parallel ( [
185
174
Animated . spring ( this . state . drawerValue , {
186
175
toValue : { x : 0 , y : 0 } ,
@@ -213,7 +202,7 @@ export default class Drawer extends Component<DrawerProps, DrawerState> {
213
202
] ) . start ( ( ) => {
214
203
this . props . closeDrawer ! ( false ) ;
215
204
this . props . onChange ! ( false ) ;
216
- this . setState ( { zIndexValue : 0 , control : 'state' } ) ;
205
+ this . setState ( { zIndexValue : 0 , isOpen : false } ) ;
217
206
} ) ;
218
207
}
219
208
}
0 commit comments