练习:跟着“新建项目”走完全程
这次不从文件第一行读。我们从用户真正点击的按钮开始。
- 找到按钮
ProjectManager.tsx第 144 行写着onClick={handleCreateProject}。先记下函数名。 - 找到点击函数
同文件第 53–57 行的handleCreateProject清空编辑状态,并打开命名对话框。此时还没有创建项目。 - 找到确认动作
用户输入名称后走到handleConfirm。没有editingProjectId时调用createProject(name)。 - 进入状态仓库
createProject来自useProjectStore()。去stores/projectStore.ts搜索它的定义。 - 看数据保存在哪里
Web 版本通过commands/webProjectState.ts写入localStorage;桌面 Tauri 版本会走另一套命令。这里不一定发 Flask 请求。 - 回到页面结果
store 中的 projects 改变后,sortedProjects.map(...)重新渲染,多出一张项目卡片。
你刚刚学到的关键判断
按钮后面不一定有 fetch。这个流程主要发生在 React state 和本地存储中。只有看到 fetch、api(...) 或 Tauri invoke(...),才继续追到网络或桌面后端。
换一个按钮自己走
- 在
ProjectManager.tsx找“删除”按钮的onClick。 - 记下函数名,搜索定义。
- 看为什么第一次点击只打开确认框。
- 找确认按钮调用了哪个 store 动作。
- 到
webProjectState.ts找records.delete(projectId)。
没有看到 fetch,就能断定按钮什么都没保存吗?
答案:不能。它可能写入 React store、localStorage、IndexedDB,或通过 Tauri invoke 调用桌面后端。要继续沿函数看证据。