From c7b8cdab40c44aeff8fc9a2ee50dcdd9f746bb5f Mon Sep 17 00:00:00 2001 From: Pig Fang Date: Sat, 6 Jun 2020 10:12:16 +0800 Subject: [PATCH] correct the implementation of `useMount` --- .../assets/src/scripts/hooks/useMount.ts | 16 +- .../assets/src/views/skinlib/Show/index.tsx | 159 +++++++++--------- resources/assets/src/views/skinlib/Upload.tsx | 21 +-- .../src/views/user/Closet/Previewer.tsx | 17 +- .../src/views/user/Players/Previewer.tsx | 27 +-- 5 files changed, 126 insertions(+), 114 deletions(-) diff --git a/resources/assets/src/scripts/hooks/useMount.ts b/resources/assets/src/scripts/hooks/useMount.ts index 5d250131..28e3b9e5 100644 --- a/resources/assets/src/scripts/hooks/useMount.ts +++ b/resources/assets/src/scripts/hooks/useMount.ts @@ -1,16 +1,20 @@ -import { useEffect, useMemo } from 'react' +import { useEffect, useRef } from 'react' -export default function useMount(selector: string): HTMLElement { - const container = useMemo(() => document.createElement('div'), []) +export default function useMount(selector: string): HTMLElement | null { + const container = useRef(null) useEffect(() => { const mount = document.querySelector(selector)! - mount.appendChild(container) + const div = document.createElement('div') + container.current = div + + mount.appendChild(div) return () => { - mount.removeChild(container) + mount.removeChild(div) + container.current = null } }, []) - return container + return container.current } diff --git a/resources/assets/src/views/skinlib/Show/index.tsx b/resources/assets/src/views/skinlib/Show/index.tsx index 5456361a..d23934f4 100644 --- a/resources/assets/src/views/skinlib/Show/index.tsx +++ b/resources/assets/src/views/skinlib/Show/index.tsx @@ -238,87 +238,88 @@ const Show: React.FC = () => { return ( - {createPortal( - }> - - {currentUid === 0 ? ( - - ) : ( -
-
- {liked && ( - - )} - {liked ? ( - - ) : ( - - )} - {texture.type !== TextureType.Cape && ( - - )} - {canBeDownloaded && ( - - )} - -
-
}> + + {currentUid === 0 ? ( + + ) : ( +
+
+ {liked && ( + + )} + {liked ? ( + + ) : ( + + )} + {texture.type !== TextureType.Cape && ( + + )} + {canBeDownloaded && ( + + )} + +
+
+ + {texture.likes} +
-
- )} - - , - container, - )} + )} + + , + container, + )}

{t('skinlib.show.detail')}

diff --git a/resources/assets/src/views/skinlib/Upload.tsx b/resources/assets/src/views/skinlib/Upload.tsx index 5c7bbf23..1bcd3a4c 100644 --- a/resources/assets/src/views/skinlib/Upload.tsx +++ b/resources/assets/src/views/skinlib/Upload.tsx @@ -233,16 +233,17 @@ const Upload: React.FC = () => { )}
- {ReactDOM.createPortal( - }> - - , - container, - )} + {container && + ReactDOM.createPortal( + }> + + , + container, + )} ) } diff --git a/resources/assets/src/views/user/Closet/Previewer.tsx b/resources/assets/src/views/user/Closet/Previewer.tsx index ccb1f5be..01ff4f4f 100644 --- a/resources/assets/src/views/user/Closet/Previewer.tsx +++ b/resources/assets/src/views/user/Closet/Previewer.tsx @@ -17,13 +17,16 @@ const Previewer: React.FC = (props) => { const skin = props.skin ? `${blessing.base_url}/textures/${props.skin}` : '' const cape = props.cape ? `${blessing.base_url}/textures/${props.cape}` : '' - return ReactDOM.createPortal( - }> - - {props.children} - - , - container, + return ( + container && + ReactDOM.createPortal( + }> + + {props.children} + + , + container, + ) ) } diff --git a/resources/assets/src/views/user/Players/Previewer.tsx b/resources/assets/src/views/user/Players/Previewer.tsx index 0f37a473..c10630d2 100644 --- a/resources/assets/src/views/user/Players/Previewer.tsx +++ b/resources/assets/src/views/user/Players/Previewer.tsx @@ -28,19 +28,22 @@ const Previewer: React.FC = (props) => { const { skin, cape, isAlex } = props - return ReactDOM.createPortal( - is3d ? ( - }> - + return ( + container && + ReactDOM.createPortal( + is3d ? ( + }> + + {switcher} + + + ) : ( + {switcher} - - - ) : ( - - {switcher} - - ), - container, + + ), + container, + ) ) }