refactor: split useProductActions into product-actions sub-hooks #1095
Reference in New Issue
Block a user
Delete Branch "refactor/use-product-actions"
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?
变更说明
将 useProductActions 拆分为多个子 Hook,主文件从 187 行精简到 96 行(-49%)。
拆分结构
三阶段拆分
兼容性
fc8ffc94f1to976c5b7215CI全绿,自动审批通过。
🚀 预览环境已部署
【阻塞级判定】
📊 审查概览
🔥 阻塞级问题(必须修复)
[useBatchDownload.ts: 24-47] 组件卸载后状态更新导致内存泄漏
poll函数是一个递归异步调用,如果用户在轮询过程中离开当前页面(组件卸载),递归仍会继续执行。当最终调用setBatchDownloading(false)时,React 会抛出 "Can't perform a React state update on an unmounted component" 警告,且网络请求仍在浪费资源。useRef跟踪组件的挂载状态,或在useEffect中进行清理。例如:[useBatchDelete.ts: 18-22] 串行执行导致严重的性能问题
for循环中使用await逐个等待删除请求完成。如果用户选中了较多项目(例如 50 个或更多),操作总耗时将是单个请求耗时的累加,导致界面长时间无响应,严重违背“批量操作”的高效初衷。Promise.all或Promise.allSettled进行并发请求处理,以大幅提升操作速度。若担心并发过高,可使用分块并发(如p-limit库)。💡 改进建议(不阻塞合并)
[useBatchDelete.ts: 20-22] 错误处理过于静默
catch块中完全忽略错误(// 忽略单个失败)。如果删除是因为权限不足或网络错误导致的,用户将无法得知具体原因。建议至少在控制台记录错误,或者在最终提示中明确告知用户有部分失败。[useBatchDelete.ts: 27] 部分成功时的提示不准确
success类型的 message。如果successCount < ids.length,应该使用warning或error级别的提示,告知用户仅部分删除成功,避免误导。✅ 良好实践
useBatchDownload中实现了轮询超时机制(maxAttempts),避免了无限轮询。useBatchDownload使用了useCallback并正确依赖了selectedIds和clearSelection,保证了回调函数引用的稳定性(注意:selectedIds是引用类型,需确保父组件传递时引用稳定,否则会导致频繁重渲染)。🤖 由 AI 代码审查机器人自动生成 | 2026-07-28 08:51:29 | 模型: