From 827146f00807493f07e4cb15975a65d5babf7d54 Mon Sep 17 00:00:00 2001 From: roku-ft Date: 2025年3月17日 21:15:15 +0900 Subject: [PATCH] refactor useGUI to utilize useRef for GUI instance management --- utils/useGUI.ts | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/utils/useGUI.ts b/utils/useGUI.ts index 37c04b4d..f7556f5f 100644 --- a/utils/useGUI.ts +++ b/utils/useGUI.ts @@ -1,33 +1,37 @@ -import { useCallback, useEffect, useState, RefObject } from "react"; +import { useCallback, useEffect, RefObject, useRef } from "react"; import GUI from "lil-gui"; -export const useGUI = (setupGUI: (gui: GUI) => void, title?: string, container?: RefObject) => { - const [gui, setGUIState] = useState(null); +export const useGUI = (setupGUI: (gui: GUI) => void, title?: string, container?: RefObject) => { + const guiRef = useRef(null); - useEffect(() => { - if (!gui) { + useEffect(() => { + + if (!guiRef.current) { const newGui = new GUI({ closeFolders: true, width: 240, title, autoPlace: container?.current ? false : true, - container: container?.current || undefined, + container: container?.current || undefined, }); - setGUIState(newGui); + guiRef.current = newGui; setupGUI(newGui); } + return () => { - if (gui) { - gui?.destroy(); - setGUIState(null); + if (guiRef.current) { + guiRef.current.destroy(); + guiRef.current = null; } }; - }, [gui, setupGUI, title, container]); - const updateDisplays = useCallback(() => { - gui?.folders.forEach((folder) => + }, [setupGUI, title, container]); + + const updateDisplays = useCallback(() => { + guiRef.current?.folders.forEach((folder) => folder.controllers.forEach((controller) => controller.updateDisplay()) - ); - }, [gui]); + ); + }, []); + return updateDisplays; -}; +}; \ No newline at end of file

AltStyle によって変換されたページ (->オリジナル) /