跳转至

[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 → onViewChangesetState({ 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 审查工作流