[ISSUE-0049] 空状态"去创建任务"直接弹 Dialog¶
用户反馈:商家列表空状态的"去创建任务"按钮现在是跳到任务页面,能和左下"创建任务"一样直接打开弹窗?
病灶(v0.10.68 之前)¶
local-data-view.tsx:753-772 空状态按钮 onClick:
走 storage 信号 → main-layout watch → setPage('task') → 用户到了任务页还要再点一次创建任务按钮才打开 Dialog。多余一次跳转。
历史原因:v0.10.53 ISSUE-0035 修过这个按钮(旧版用错的 storage API 完全不动)。当时只让它"能动",没改交互目标。
修(prop 链)¶
同 component tree(main-layout → DataView → LocalDataView),直接传 callback:
// local-data-view.tsx
type Props = {
+ onCreateTask?: () => void;
};
<Button onClick={() => onCreateTask?.()}>去创建任务</Button>
// data-view.tsx
interface Props {
+ onCreateTask?: () => void;
}
<LocalDataView onCreateTask={onCreateTask} />
// main-layout.tsx
<DataView onCreateTask={() => setCreateOpen(true)} />
3 个文件加 1 个 prop,干净直接。避免: - storage 信号绕路(这里同 window,不必跨 storage) - 5s 时效检查的潜在 race
顺便修工作流(v0.10.68 教训延续)¶
严格按"先 bump → 后 build → sanity check":
PKG=$(node -p "require('./package.json').version")
MAN=$(node -e "console.log(JSON.parse(require('fs').readFileSync('dist-v2/chrome-mv3/manifest.json')).version)")
[ "$PKG" = "$MAN" ] && echo "✅ 同步:$PKG" || echo "❌ 不同步"
更新到 docs/rules/version-release-flow.md — 之前的 diff <(grep) 方式因 JSON 格式(冒号后空格 vs 无)会误报。
audit_grep¶
audit_grep:
- pattern: "type:\\s*['\"]go-page['\"][\\s\\S]{0,200}page:\\s*['\"]task['\"]"
description: "在 main 端组件用 storage 信号跳 task 页 — 应改 prop 链直接调 onCreateTask"
未来如新组件还想用 go-page 跳 task 来打开 Dialog → pre-commit 拦截 → 改 prop 链。
元洞察 — Storage 信号 vs Prop 链¶
| 场景 | 选 |
|---|---|
| 跨 window / 跨 entrypoint(popup → main) | storage 信号 |
| 同 component tree 内 | prop 链 |
| 跨 React provider(深层组件 ↔ 顶层 state) | Context |
我之前的"storage 信号 = 万能"思维是过度抽象。同 tree 内 prop 直接传是最直观、最快、最易调试。
相关¶
- [[0035-create-task-btn-storage-api-mix|0035-去创建任务按钮无反应-storage-api混用]] — 这个按钮的上一轮修复
- [[0044-screenshot-6-ux-feedback-batch|0044-用户截图6项UX反馈-缩放-按钮色-排序-分页-顶部CTA]] — UX 多次反馈集中修同精神
- 版本发布流程 — 顺便沉淀的 sanity check 命令