本文档全面概述了Screenshot-to-Code应用程序的前端架构。它阐述了组件结构、状态管理方法、用户界面流程以及用于管理代码生成和更新的版本控制系统。
前端采用React和TypeScript构建,并使用Zustand进行状态管理。本文档侧重于客户端实现;有关后端集成的信息,请参阅系统架构。
前端架构遵循基于组件的结构,并进行集中式状态管理。该应用程序管理各种状态以处理代码生成工作流,从截图上传到代码编辑和细化。
来源: frontend/src/App.tsx27-394 frontend/src/types.ts22-26
前端由三个主要部分组成,根据应用程序状态条件性地呈现
来源: frontend/src/App.tsx338-391
该应用程序使用Zustand进行状态管理,有两个主要store
AppStore负责整体应用程序状态,包括当前模式(INITIAL、CODING、CODE_READY)和与UI相关的函数。
ProjectStore维护项目的代码历史、变体和执行状态。它遵循基于提交的方法来跟踪更改。
来源: frontend/src/store/project-store.ts4-149 frontend/src/components/commits/types.ts1-37
应用程序在用户上传截图、生成代码和请求更新时在状态之间转换。以下图表显示了关键的状态转换及其触发器
来源: frontend/src/App.tsx109-166 frontend/src/App.tsx231-297
当用户上传截图或提供URL时,前端会通过一系列函数调用和状态更新来启动代码生成过程。
来源: frontend/src/App.tsx168-228 frontend/src/App.tsx231-297
Screenshot-to-Code应用程序实现了一个类似Git的版本控制系统,用于跟踪生成代码的更改。该系统围绕提交的概念构建,提交代表代码在不同时间点的快照。
每个提交包含
来源: frontend/src/components/commits/types.ts1-37 frontend/src/components/commits/utils.ts1-32
该系统支持为同一输入生成多个版本的代码(变体),允许用户选择他们喜欢的实现。
来源: frontend/src/components/variants/Variants.tsx1-43 frontend/src/store/project-store.ts114-132
该应用程序的UI分为不同的组件,这些组件在工作流中服务于特定目的
StartPane在应用程序处于INITIAL状态时显示。它提供以下选项:
PreviewPane显示生成的代码及其渲染的输出。它包括:
Sidebar提供用于代码细化和历史导航的工具
应用程序的数据流遵循单向模式,用户操作会触发状态更新,并将这些更新传播到UI。
管理此流程的关键函数包括:
doCreate:处理从截图进行的初始代码生成doUpdate:处理用户更新说明doGenerateCode:通用的代码生成接口appendCommitCode/setCommitCode:更新store中的代码setAppState:更新应用程序状态来源: frontend/src/App.tsx231-297 frontend/src/App.tsx168-228
该应用程序通过usePersistedState hook维护用户设置,允许偏好在会话之间持久化。设置包括:
这些设置通过SettingsDialog组件进行访问和修改。
前端使用以下技术构建:
| 技术 | 目的 |
|---|---|
| React | UI库 |
| TypeScript | 类型安全的 JavaScript |
| Zustand | 状态管理 |
| WebSockets | 与后端的实时通信 |
| CodeMirror | 代码编辑器 |
| TailwindCSS | 样式 |
来源: frontend/package.json15-51
Screenshot-to-Code的前端架构采用基于组件的结构和集中的状态管理,为将截图转换为代码提供无缝的用户体验。该应用程序的状态系统、版本控制机制和实时代码生成功能实现了交互式和迭代式开发过程。