@@ -16,12 +16,10 @@ const createPortal = isReact16
1616 : ReactDOM . unstable_renderSubtreeIntoContainer ;
1717
1818function getParentElement ( parentSelector ) {
19- return parentSelector ( ) || Modal . defaultProps . parentSelector ;
19+ return parentSelector ( ) ;
2020}
2121
2222class Modal extends Component {
23- state = Object . assign ( { } , Modal . defaultProps ) ;
24-
2523 static setAppElement ( element ) {
2624 ariaAppHider . setElement ( element ) ;
2725 }
@@ -122,45 +120,31 @@ class Modal extends Component {
122120 ! isReact16 && this . renderPortal ( this . props ) ;
123121 }
124122
125- static getDerivedStateFromProps ( newProps , prevState ) {
126- if ( ! canUseDOM ) return null ;
127- const { isOpen } = newProps ;
128- // Stop unnecessary renders if modal is remaining closed
129- if ( prevState && ! prevState . isOpen && ! isOpen ) return null ;
130-
131- const currentParent = getParentElement ( prevState . parentSelector ) ;
132- const newParent = getParentElement ( newProps . parentSelector ) ;
123+ getSnapshotBeforeUpdate ( prevProps ) {
124+ const prevParent = getParentElement ( prevProps . parentSelector ) ;
125+ const nextParent = getParentElement ( this . props . parentSelector ) ;
126+ return { prevParent, nextParent } ;
127+ }
133128
134- const enumeratedState = {
135- isOpen : newProps . isOpen ,
136- parentSelector : newProps . parentSelector ,
137- portalClassName : newProps . portalClassName
138- } ;
129+ componentDidUpdate ( prevProps , _ , snapshot ) {
130+ if ( ! canUseDOM ) return ;
131+ const { isOpen, portalClassName } = this . props ;
139132
140- if ( newParent !== currentParent ) {
141- currentParent . removeChild ( this . node ) ;
142- newParent . appendChild ( this . node ) ;
133+ if ( prevProps . portalClassName !== portalClassName ) {
134+ this . node . className = portalClassName ;
143135 }
144136
145- const newState = Object . assign ( prevState , enumeratedState ) ;
146- ! isReact16 && this . renderPortal ( newProps ) ;
147- return newState ;
148- }
137+ // Stop unnecessary renders if modal is remaining closed
138+ if ( ! prevProps . isOpen && ! isOpen ) return ;
149139
150- getSnapshotBeforeUpdate ( prevProps , prevState ) {
151- if ( ! canUseDOM ) {
152- return null ;
153- } else {
154- this . node . className = prevState . portalClassName ;
155- return prevState . portalClassName ;
140+ const { prevParent, nextParent } = snapshot ;
141+ if ( nextParent !== prevParent ) {
142+ prevParent . removeChild ( this . node ) ;
143+ nextParent . appendChild ( this . node ) ;
156144 }
157- }
158145
159- /*eslint-disable no-unused-vars*/
160- componentDidUpdate ( prevProps , prevState ) {
161- // Just to satisfy polyfilling
146+ ! isReact16 && this . renderPortal ( this . props ) ;
162147 }
163- /*eslint-enable no-unused-vars*/
164148
165149 componentWillUnmount ( ) {
166150 if ( ! canUseDOM || ! this . node || ! this . portal ) return ;
0 commit comments