Skip to content

Commit e91d59a

Browse files
Hypnosphidiasbruno
authored andcommitted
Fix lifecycle method usages in Modal
1 parent 0dd7805 commit e91d59a

File tree

1 file changed

+18
-34
lines changed

1 file changed

+18
-34
lines changed

Diff for: src/components/Modal.js

+18-34
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,10 @@ const createPortal = isReact16
1616
: ReactDOM.unstable_renderSubtreeIntoContainer;
1717

1818
function getParentElement(parentSelector) {
19-
return parentSelector() || Modal.defaultProps.parentSelector;
19+
return parentSelector();
2020
}
2121

2222
class 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

Comments
 (0)