1 | import React from 'react';
|
2 | import ReactDOM from 'react-dom';
|
3 | import PropTypes from 'prop-types';
|
4 | import { canUseDOM } from './utils';
|
5 |
|
6 | const propTypes = {
|
7 | children: PropTypes.node.isRequired,
|
8 | node: PropTypes.any,
|
9 | };
|
10 |
|
11 | class Portal extends React.Component {
|
12 | componentWillUnmount() {
|
13 | if (this.defaultNode) {
|
14 | document.body.removeChild(this.defaultNode);
|
15 | }
|
16 | this.defaultNode = null;
|
17 | }
|
18 |
|
19 | render() {
|
20 | if (!canUseDOM) {
|
21 | return null;
|
22 | }
|
23 |
|
24 | if (!this.props.node && !this.defaultNode) {
|
25 | this.defaultNode = document.createElement('div');
|
26 | document.body.appendChild(this.defaultNode);
|
27 | }
|
28 |
|
29 | return ReactDOM.createPortal(
|
30 | this.props.children,
|
31 | this.props.node || this.defaultNode,
|
32 | );
|
33 | }
|
34 | }
|
35 |
|
36 | Portal.propTypes = propTypes;
|
37 |
|
38 | export default Portal;
|