我有简单的反应门户组件。首先,我在类组件中编写了这个,一切都很好。但我决定将其重写为功能组件。在此门户仅在 div#portal 内部生成 div 而在内部没有子级之后。我不知道哪里出错了。
// Functional Component
import React, { useEffect } from 'react';
import { createPortal } from 'react-dom';
const Lightbox = ({ children }) => {
const portalRoot = document.getElementById('portal');
const el = document.createElement('div');
useEffect(() => {
portalRoot.appendChild(el);
return () => portalRoot.removeChild(el);
}, []);
return createPortal(children, el);
};
export default Lightbox;
// Class component
// import { Component } from 'react';
// import ReactDOM from 'react-dom';
// const portalRoot = document.getElementById('portal');
// export default class Lightbox extends Component {
// constructor() {
// super();
// this.el = document.createElement('div');
// }
// componentDidMount = () => {
// portalRoot.appendChild(this.el);
// };
// componentWillUnmount = () => {
// portalRoot.removeChild(this.el);
// };
// render() {
// const { children } = this.props;
// return ReactDOM.createPortal(children, this.el);
// }
// }