mirror of
https://github.com/captbaritone/webamp.git
synced 2026-07-28 20:40:39 +00:00
Make Desktop a functional component with hooks
This commit is contained in:
parent
e3b3eab63e
commit
0472033fba
1 changed files with 12 additions and 26 deletions
|
|
@ -1,32 +1,18 @@
|
|||
import React from "react";
|
||||
import ReactDOM from "react-dom";
|
||||
|
||||
interface Props {}
|
||||
const Desktop = React.memo(({ children }) => {
|
||||
const [desktopNode] = React.useState(() => document.createElement("div"));
|
||||
|
||||
export default class Desktop extends React.Component<Props> {
|
||||
_desktopNode: HTMLElement | null;
|
||||
constructor(props: Props) {
|
||||
super(props);
|
||||
this._desktopNode = null;
|
||||
}
|
||||
React.useEffect(() => {
|
||||
desktopNode.classList.add("webamp-desktop");
|
||||
document.body.appendChild(desktopNode);
|
||||
return () => {
|
||||
document.body.removeChild(desktopNode);
|
||||
};
|
||||
}, [desktopNode]);
|
||||
|
||||
componentWillUnmount() {
|
||||
if (this._desktopNode != null) {
|
||||
document.body.removeChild(this._desktopNode);
|
||||
this._desktopNode = null;
|
||||
}
|
||||
}
|
||||
return ReactDOM.createPortal(children, desktopNode);
|
||||
});
|
||||
|
||||
_getNode() {
|
||||
if (this._desktopNode == null) {
|
||||
this._desktopNode = document.createElement("div");
|
||||
this._desktopNode.classList.add("webamp-desktop");
|
||||
document.body.appendChild(this._desktopNode);
|
||||
}
|
||||
return this._desktopNode;
|
||||
}
|
||||
|
||||
render() {
|
||||
return ReactDOM.createPortal(this.props.children, this._getNode());
|
||||
}
|
||||
}
|
||||
export default Desktop;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue