refactor(generate): 拆分 useStep5Voice 模式选择逻辑到子Hook(184→165行, -10%) #1089
Reference in New Issue
Block a user
Delete Branch "refactor/use-step5-voice"
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?
变更说明
将 useStep5Voice 中的模式切换、克隆操作等选择逻辑抽离为
useVoiceModeSelection子 Hook,主文件从 184 行减至 165 行(-10%)。注:useStep5Voice 之前已拆分为 4 个子 Hook(useVoiceAudio/useVoiceRecommend/useTtsSynthesis/useSaveToLibrary),本此为增量优化。
拆分结构
兼容性
35fc644e96toe2304f316f2673e71774to4750e67c55CI全绿,自动审批通过。
🚀 预览环境已部署
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
无
💡 改进建议(不阻塞合并)
[useVoiceModeSelection.ts: 43-47] 逻辑不一致风险
handleSelectClonedVoice函数仅更新了selectedClonedVoice,但未同步更新voiceMode为"clone"。相比之下,handleSelectPresetVoice和handleSelectRecommendedVoice均在选中音色时同步更新了模式。这种不对称可能导致状态不一致(例如:当前模式为 preset,但 selectedClonedVoice 有值),建议在函数内补充onVoiceModeChange("clone")。[useStep5Voice.tsx: 104] 性能优化建议
handleCloneSuccess是一个普通函数,每次组件重新渲染时都会创建新的引用。如果该函数被传递给子组件或用于useEffect依赖项,会导致不必要的重渲染或副作用循环。建议使用useCallback包裹,并将rawCloneSuccess加入依赖数组。✅ 良好实践
useVoiceModeSelection逻辑抽离为独立的 Hook,符合关注点分离原则,提高了代码的可复用性和可测试性。message.success在上层组件调用,使得底层 Hook 不依赖具体的 UI 组件库,保持了良好的纯度。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-07-28 08:33:55 | 模型: