diff --git a/apps/web/src/pages/editing-planner/components/TtsPanel/hooks/useTtsPanel.ts b/apps/web/src/pages/editing-planner/components/TtsPanel/hooks/useTtsPanel.ts index 631085b9d..e6e2d8390 100644 --- a/apps/web/src/pages/editing-planner/components/TtsPanel/hooks/useTtsPanel.ts +++ b/apps/web/src/pages/editing-planner/components/TtsPanel/hooks/useTtsPanel.ts @@ -20,20 +20,23 @@ export const useTtsPanel = ({ open, config, onChange, onClose }: UseTtsPanelOpti const [previewLoading, setPreviewLoading] = useState(false) const audioRef = useRef(null) const mountedRef = useRef(true) - /* ── 加载音色列表 ── */ useEffect(() => { if (!open) return - mountedRef.current = true + let active = true setVoicesLoading(true) getTtsVoices() - .then((v) => setVoices(v)) - .catch(() => message.error("加载音色列表失败")) + .then((v) => { + if (active) setVoices(v) + }) + .catch(() => { + if (active) message.error("加载音色列表失败") + }) .finally(() => { - if (mountedRef.current) setVoicesLoading(false) + if (active) setVoicesLoading(false) }) return () => { - mountedRef.current = false + active = false } }, [open])