correct the implementation of useMount
This commit is contained in:
parent
a1ce50609f
commit
c7b8cdab40
|
|
@ -1,16 +1,20 @@
|
||||||
import { useEffect, useMemo } from 'react'
|
import { useEffect, useRef } from 'react'
|
||||||
|
|
||||||
export default function useMount(selector: string): HTMLElement {
|
export default function useMount(selector: string): HTMLElement | null {
|
||||||
const container = useMemo(() => document.createElement('div'), [])
|
const container = useRef<HTMLDivElement | null>(null)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const mount = document.querySelector(selector)!
|
const mount = document.querySelector(selector)!
|
||||||
mount.appendChild(container)
|
const div = document.createElement('div')
|
||||||
|
container.current = div
|
||||||
|
|
||||||
|
mount.appendChild(div)
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
mount.removeChild(container)
|
mount.removeChild(div)
|
||||||
|
container.current = null
|
||||||
}
|
}
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
return container
|
return container.current
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -238,7 +238,8 @@ const Show: React.FC = () => {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
{createPortal(
|
{container &&
|
||||||
|
createPortal(
|
||||||
<React.Suspense fallback={<ViewerSkeleton />}>
|
<React.Suspense fallback={<ViewerSkeleton />}>
|
||||||
<Previewer
|
<Previewer
|
||||||
{...{
|
{...{
|
||||||
|
|
|
||||||
|
|
@ -233,7 +233,8 @@ const Upload: React.FC = () => {
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{ReactDOM.createPortal(
|
{container &&
|
||||||
|
ReactDOM.createPortal(
|
||||||
<React.Suspense fallback={<ViewerSkeleton />}>
|
<React.Suspense fallback={<ViewerSkeleton />}>
|
||||||
<Previewer
|
<Previewer
|
||||||
skin={type !== TextureType.Cape ? texture : undefined}
|
skin={type !== TextureType.Cape ? texture : undefined}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,9 @@ const Previewer: React.FC<Props> = (props) => {
|
||||||
const skin = props.skin ? `${blessing.base_url}/textures/${props.skin}` : ''
|
const skin = props.skin ? `${blessing.base_url}/textures/${props.skin}` : ''
|
||||||
const cape = props.cape ? `${blessing.base_url}/textures/${props.cape}` : ''
|
const cape = props.cape ? `${blessing.base_url}/textures/${props.cape}` : ''
|
||||||
|
|
||||||
return ReactDOM.createPortal(
|
return (
|
||||||
|
container &&
|
||||||
|
ReactDOM.createPortal(
|
||||||
<React.Suspense fallback={<ViewerSkeleton />}>
|
<React.Suspense fallback={<ViewerSkeleton />}>
|
||||||
<Viewer skin={skin} cape={cape} isAlex={props.isAlex} showIndicator>
|
<Viewer skin={skin} cape={cape} isAlex={props.isAlex} showIndicator>
|
||||||
{props.children}
|
{props.children}
|
||||||
|
|
@ -25,6 +27,7 @@ const Previewer: React.FC<Props> = (props) => {
|
||||||
</React.Suspense>,
|
</React.Suspense>,
|
||||||
container,
|
container,
|
||||||
)
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Previewer
|
export default Previewer
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,9 @@ const Previewer: React.FC<Props> = (props) => {
|
||||||
|
|
||||||
const { skin, cape, isAlex } = props
|
const { skin, cape, isAlex } = props
|
||||||
|
|
||||||
return ReactDOM.createPortal(
|
return (
|
||||||
|
container &&
|
||||||
|
ReactDOM.createPortal(
|
||||||
is3d ? (
|
is3d ? (
|
||||||
<React.Suspense fallback={<ViewerSkeleton />}>
|
<React.Suspense fallback={<ViewerSkeleton />}>
|
||||||
<Viewer3d skin={skin} cape={cape} isAlex={isAlex}>
|
<Viewer3d skin={skin} cape={cape} isAlex={isAlex}>
|
||||||
|
|
@ -42,6 +44,7 @@ const Previewer: React.FC<Props> = (props) => {
|
||||||
),
|
),
|
||||||
container,
|
container,
|
||||||
)
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Previewer
|
export default Previewer
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user