refactor(TtsPanel): TTS配音面板目录化拆分(332→173行, -48%) #1193
Reference in New Issue
Block a user
Delete Branch "refactor/tts-panel-split"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
变更内容
TTS配音面板组件目录化拆分,降低单文件复杂度:
新增文件
TtsPanel/index.tsx- 主组件(173行,组合层)TtsPanel/constants.ts- 常量(音色分类、配音模式选项)TtsPanel/hooks/useTtsPanel.ts- 核心逻辑Hook(音色加载、试听播放、所有配置操作)TtsPanel/components/VoiceSelector.tsx- 音色选择器组件TtsPanel/components/TtsSlider.tsx- 通用滑块组件删除文件
TtsPanel.tsx- 旧单文件(332行,已目录化替代)变更说明
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
无
💡 改进建议(不阻塞合并)
[apps/web/src/pages/editing-planner/components/TtsPanel/components/TtsSlider.tsx:38] 列表渲染 Key 建议
marks时使用了索引i作为 key。虽然当前marks是静态常量,但在 React 列表渲染中,最佳实践是使用数据本身作为 key(如果唯一),以避免因数组顺序变化导致的潜在渲染问题。建议修改为key={m}。[apps/web/src/test/pages/editing-planner/components/TtsPanel] 测试覆盖率不足
useTtsPanel.test.ts等)仅为 Smoke test(冒烟测试),仅验证模块能否加载,未覆盖核心逻辑(如handlePreview音频播放、handleTextChange截断逻辑等)。建议补充单元测试以保障重构后的逻辑稳定性。✅ 良好实践
useTtsPanelhook 中正确使用了audioRef和mountedRef来处理组件卸载时的音频停止和异步状态竞态问题,有效避免了内存泄漏和 setState on unmounted error。VoiceSelector组件中在处理voice可能不存在的情况时,使用了可选链和逻辑与(voice && ...),保证了在数据未加载完成时的 UI 稳定性。🤖 由 AI 代码审查机器人自动生成 | 2026-07-30 03:59:43 | 模型:
🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
🗑️ 预览环境已清理
PR #1193 已关闭或合并,对应的预览环境已被清理。