Skip to content

练习:跟着“新建项目”走完全程

这次不从文件第一行读。我们从用户真正点击的按钮开始。

  1. 找到按钮
    ProjectManager.tsx 第 144 行写着 onClick={handleCreateProject}。先记下函数名。
  2. 找到点击函数
    同文件第 53–57 行的 handleCreateProject 清空编辑状态,并打开命名对话框。此时还没有创建项目。
  3. 找到确认动作
    用户输入名称后走到 handleConfirm。没有 editingProjectId 时调用 createProject(name)
  4. 进入状态仓库
    createProject 来自 useProjectStore()。去 stores/projectStore.ts 搜索它的定义。
  5. 看数据保存在哪里
    Web 版本通过 commands/webProjectState.ts 写入 localStorage;桌面 Tauri 版本会走另一套命令。这里不一定发 Flask 请求。
  6. 回到页面结果
    store 中的 projects 改变后,sortedProjects.map(...) 重新渲染,多出一张项目卡片。

你刚刚学到的关键判断

按钮后面不一定有 fetch。这个流程主要发生在 React state 和本地存储中。只有看到 fetchapi(...) 或 Tauri invoke(...),才继续追到网络或桌面后端。

换一个按钮自己走

  1. ProjectManager.tsx 找“删除”按钮的 onClick
  2. 记下函数名,搜索定义。
  3. 看为什么第一次点击只打开确认框。
  4. 找确认按钮调用了哪个 store 动作。
  5. webProjectState.tsrecords.delete(projectId)
没有看到 fetch,就能断定按钮什么都没保存吗?

答案:不能。它可能写入 React store、localStorage、IndexedDB,或通过 Tauri invoke 调用桌面后端。要继续沿函数看证据。

写给想驾驭 AI,而不只是依赖 AI 的 Vibe Coder。