1.8 KiB
1.8 KiB
UI 大文件拆分为工作区模块(批量案例)
- 日期:2026-02-16
- 适用范围:前端超大组件(页面/3D 编辑器/弹窗)因“壳文件转发”被审查驳回,需做实质拆分。
问题特征
- 单文件超过 500~800 行,状态、请求、渲染全部混在一起。
- 之前只做了
*.container.tsx -> *.workspace.tsx的壳层迁移,审查仍判定为未拆分。 - 复核关注点不是“文件名变化”,而是“职责分层是否可见”。
解决方案(本次落地)
- 先补齐可编译基线,避免在红灯状态做结构重构。
- 按“容器编排 + 业务 hooks + 视图区块组件”拆分:
- Assembly:
hooks/useAssemblyEditorState.ts+ 顶栏/预览/步骤面板组件。 - Home:
home/hooks/*+home/components/HomeModelsSection.tsx。 - ProductDetail:顶部栏、信息卡、创建分享弹窗拆成独立组件。
- SKUDetail:顶部动作区、只读侧栏、规格切换抽屉拆分。
- HoleViewer:渲染层 hook + 控制层 hook + 图例统计组件。
- AddSKUModal:schema + submit hook + 字段分组组件。
- HoleEditor:types + validation + interaction hook。
- Assembly:
- 每个拆分点都保持原有行为不变,Workspace 只做组装。
验证方式
npm run type-check -- --pretty falsenpm test -- tests/api/auth-me.test.ts --runInBandnpm test -- tests/lib/zip-parser.test.ts --runInBandnpm test -- tests/services/sku-upload.service.test.ts --runInBand
复用清单
- 先找“状态管理块”和“大段 JSX 区块”,优先抽这两类。
- hooks 命名按能力域(
use-xxx),组件命名按区域(TopBar/Sidebar/Modal)。 - 重构后保留统一入口(container/workspace),避免页面导入路径抖动。
- 台账同步标注“已修复待复核”,并写清新增模块文件路径。