[ISSUE-0060] 第 12 轮 agent 审查 v0.10.79¶
v0.10.79 useDataSource 大重构 commit 后立即第 12 轮独立 agent 审查。 结论:收敛 ✅ — 大重构本身正确,但有 1 个 🟡 性能 + 1 个 🟢 死代码值得清理。
🟡 viewId 入 hook server-mode useEffect dep → 双拉¶
src/hooks/use-data-source.ts:154 useEffect deps 含 opts.viewId。
链路:
1. 用户切视图 → setViewId(newId) → hook deps 中 opts.viewId 变 → useEffect 触发 → dataRun({ ...老 filters... })
2. 同时 configRun(newId) → onSuccess → onViewChange → setState({ filters: newFilters }) → hook deps 中 opts.filters 变 → useEffect 再触发 → dataRun({ ...新 filters... })
两次 dataRun,debounce 100ms 在 configRun API 慢时(>100ms)合不掉 → 双拉。 旧版 LocalDataView 两个独立 useEffect 都不含 viewId — apiLocalDataList 也不读 viewId(dead param)。
修:从 hook useEffect deps 删 opts.viewId,加注释解释。
🟢 state.sort 死代码¶
local-data-view.tsx:
- L138 sort: {} — useSetState 初始字段
- L161 sort, — 从 state destructure
- L512-515 useEffect setState({ sort: newSort }) 同步 sortModel
- 但 sort 这个 object 形式({ field: 1 | -1 },jsstore where 用)无人读 — saveParams / 各处都用 formatLocalSortParams(sortModel)({by, type} 数组形式)即时算
修:删 sort: {} 字段 + destructure 的 sort + 同步 useEffect + import formatSortParams(仅这一处用了,已 unused)。
元洞察(agent 直接 quote)¶
"真重构 ≠ 真 bug。useDataSource hook 重构本身正确:mode 切换=替换 hook 实现,3-5 补丁后重构的决断对了。"
"17 个 opts 参数 + 8 个返回值 — 单一职责健康,但 caller 需要把 LocalDataView 一半 state 透传。下一步若加 hybrid mode,建议把 opts 按域分组(filterOpts / pageOpts / selectionOpts),否则参数列表会继续膨胀。"
→ 元洞察留作未来优化方向。本轮不重构(一次到位 over-engineering 风险)。
audit_grep¶
- pattern: "opts\\.viewId[\\s\\S]{0,500}\\]\\s*\\)\\s*$"
description: "hook useEffect 不应含 opts.viewId 在 dep — apiLocalDataList 不读 viewId"
工作流¶
✅ bump → build → sanity check 0.10.80
相关¶
- [[0059-usedatasource-hook-refactor|0059-useDataSource-hook大重构]] — 上一轮大重构
- 修bug全字典扫描 — agent 审查工作流