先说说整体思路。我们要实现的是一个支持多格式验证、进度条显示、断点续传的文件上传组件。考虑到后期其他模块也会用到上传功能,决定把核心逻辑抽成自定义Hook,这样既能复用又保持UI的灵活性。
一、核心Hook设计
首先创建useFileUpload.js:
二、UI组件实现
接着创建FileUploader组件:
三、样式优化要点
这里补充几个关键样式实现:
四、踩坑记录
文件类型验证时发现accept属性在MacOS和Windows表现不一致,最后补充了后端验证
大文件上传时容易造成页面卡顿,后来加了Web Worker处理文件切片
React严格模式下useCallback依赖项警告,需要用useRef缓存函数引用
这个方案在项目中跑得很稳定,后期还扩展了OSS直传功能。大家如果遇到类似需求,可以直接拿这个模板去改。有什么更好的实现思路,欢迎在评论区交流讨论。