refactor(useGenerateVideo): 拆分 useGenerateVideo Hook(370→221行, -40%) #969
Reference in New Issue
Block a user
Delete Branch "refactor/generate-video-hook"
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?
变更说明
useGenerateVideo 视频生成 Hook 拆分重构,主文件 370→221 行(-40%)
拆分文件(generate-video/ 子目录)
收益
🚀 预览环境已部署
🗑️ 预览环境已清理
PR #969 已关闭或合并,对应的预览环境已被清理。
🗑️ 预览环境已清理
PR #969 已关闭或合并,对应的预览环境已被清理。
🗑️ 预览环境已清理
PR #969 已关闭或合并,对应的预览环境已被清理。
代码审查结果 - PR #969
⚠️ 问题(3个需要修改)
apps/web/src/test/pages/generate/useGenerateVideo.test.ts 第11-14行:测试文件引用了不存在的导出变量,会导致构建失败。
phase.ts仅导出了getGenerationPhase,未导出PHASE_ORDER和getNextPhase;errorUtils.ts未导出extractErrorMessage;voiceConfig.ts未导出getDefaultVoiceConfig。Module has no exported member错误,阻断 CI/CD 流程。apps/web/src/pages/titles/hooks/useTitleEdit.ts 第62行:
useCallback依赖数组中移除了newTitleType,存在闭包陷阱风险。newTitleType。如果handleCreate函数内部使用了newTitleType变量(根据变量名推测极大概率使用),函数将始终使用初始值或旧值,导致创建标题时类型错误。apps/web/src/pages/generate/hooks/generate-video/useGenerationPolling.ts 第30-87行:组件卸载时未清理定时器,存在内存泄漏风险。
useGenerationPollinghook 内部使用了setTimeout进行轮询,虽然返回了clearTimer,但并未在 hook 内部使用useEffect注册清理函数。如果用户在轮询进行中退出页面,定时器将继续触发并尝试更新已卸载组件的状态(调用onProgress等),导致 React 警告和潜在的内存泄漏。💡 建议(2个可选)
apps/web/src/pages/generate/hooks/generate-video/useGenerationPolling.ts 第78-81行:轮询异常处理建议增加重试次数限制或退避策略。
catch块中捕获异常后直接无限递归重试(setTimeout(poll, 3000))。如果后端服务持续故障,客户端将无限发起请求,造成请求风暴和资源浪费。retryCount计数器,超过一定次数(如 5 次)后停止轮询并调用onFailed。apps/web/src/pages/generate/hooks/generate-video/errorUtils.ts 第32行:错误消息长度判断逻辑较为生硬。
translateError函数中msg.length < 100的判断会导致恰好 100 字符长的错误信息被降级处理为通用提示,可能掩盖具体错误。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-07-27 14:35:06 | 模型:
🗑️ 预览环境已清理
PR #969 已关闭或合并,对应的预览环境已被清理。