本文档概述了 AFFiNE 的前端架构,涵盖了关键的架构模式、组件、服务及其交互。本文档重点介绍了前端系统的结构以及不同组件如何协同工作以创建一致的用户体验。
有关编辑器系统的信息,请参阅 编辑器系统。有关特定于移动端的实现,请参阅相关特定平台的部分。
AFFiNE 的前端是使用 React 构建的,并遵循多种架构模式
来源
packages/frontend/core/src/modules/editor/entities/editor.tspackages/frontend/core/src/modules/editor/services/editors.tspackages/frontend/core/src/components/page-detail-editor.tsxpackages/common/infra/src/atom/settings.tsAFFiNE 的前端使用面向服务架构,功能组织成服务,可以在需要时注入。
EditorService 创建并管理 Editor 实体,这些实体负责处理文档编辑状态和行为。
Editor 实体
page 或 edgeless)来源
packages/frontend/core/src/modules/editor/entities/editor.tspackages/frontend/core/src/modules/editor/services/editors.tspackages/frontend/core/src/modules/editor/types.tsDocService 管理应用程序中的文档。
Doc 实体提供
来源
packages/frontend/core/src/modules/doc/index.ts(从其他文件推断)packages/frontend/core/src/components/page-detail-editor.tsxWorkbenchService 管理应用程序级别的 UI 状态和导航。
Workbench 实体
来源
packages/frontend/core/src/modules/workbench/view/workbench-link.tsxDocDisplayMetaService 为文档提供元数据显示功能。
DocDisplayMetaService
来源
packages/frontend/core/src/modules/doc-display-meta/services/doc-display-meta.tspackages/frontend/core/src/modules/doc-display-meta/index.tsPeekViewService 管理文档预览功能。
PeekView 系统
来源
packages/frontend/core/src/modules/peek-view/view/doc-preview/doc-peek-view.tsxpackages/frontend/core/src/modules/peek-view/view/utils.tspackages/frontend/core/src/components/affine/reference-link/index.tsxAFFiNE 的 UI 由 React 组件构建,它们以层级结构组织,并针对平台进行特定适配。
来源
packages/frontend/core/src/desktop/pages/workspace/detail-page/detail-page.tsxpackages/frontend/core/src/mobile/pages/workspace/detail/mobile-detail-page.tsxpackages/frontend/core/src/components/page-detail-editor.tsxRootAppSidebar 组件提供主要的导航侧边栏。
侧边栏包括
来源
packages/frontend/core/src/components/root-app-sidebar/index.tsxPageDetailEditor 组件是核心编辑器包装器。
PageDetailEditor
来源
packages/frontend/core/src/components/page-detail-editor.tsx桌面版的 DetailPage 组件提供完整的编辑体验。
桌面版 DetailPage
来源
packages/frontend/core/src/desktop/pages/workspace/detail-page/detail-page.tsxMobileDetailPage 组件提供针对移动设备优化的体验。
MobileDetailPage
来源
packages/frontend/core/src/mobile/pages/workspace/detail/mobile-detail-page.tsxpackages/frontend/core/src/mobile/pages/workspace/detail/mobile-detail-page.css.tspackages/frontend/core/src/mobile/components/page-header/index.tsxAFFiNE 的导航系统结合了 React Router 和工作台感知的组件。
关键导航组件
WorkbenchLink:拦截点击并委派给工作台AffinePageReference:用于文档引用的专用链接来源
packages/frontend/core/src/modules/workbench/view/workbench-link.tsxpackages/frontend/core/src/components/affine/reference-link/index.tsxpackages/frontend/core/src/desktop/router.tsxAFFiNE 会适应不同的环境和平台。
环境系统
来源
packages/common/env/src/global.tstools/@types/env/__all.d.tspackages/frontend/component/src/hooks/use-theme-color-meta.tsAFFiNE 使用对话框系统来管理模态框和弹出窗口。
对话框系统
来源
packages/frontend/core/src/modules/dialogs/constant.tspackages/frontend/core/src/desktop/dialogs/index.tsxpackages/frontend/core/src/desktop/dialogs/selectors/date.tsxpackages/frontend/core/src/mobile/dialogs/selectors/doc-selector.tsxAFFiNE 与后端服务集成以进行渲染和 API 访问。
关键集成点
来源
packages/backend/server/src/core/doc-renderer/controller.tspackages/backend/server/src/core/config/config.ts.github/helm/affine/templates/ingress.yaml| 服务 | 描述 | 关键函数 | 关键文件 |
|---|---|---|---|
| EditorService | 创建并管理编辑器实体 | createEditor() | packages/frontend/core/src/modules/editor/services/editors.ts |
| DocService | 管理文档 | open(), loaded() | 跨多个文件引用 |
| WorkbenchService | 管理应用程序 UI 状态 | openDoc(), openSidebar() | packages/frontend/core/src/modules/workbench/view/workbench-link.tsx |
| PeekViewService | 管理文档预览 | open(), close() | packages/frontend/core/src/modules/peek-view/view/doc-preview/doc-peek-view.tsx |
| DocDisplayMetaService | 提供文档显示元数据 | title$(), icon$() | packages/frontend/core/src/modules/doc-display-meta/services/doc-display-meta.ts |
| WorkspaceDialogService | 管理工作区范围的对话框 | open(), close() | packages/frontend/core/src/desktop/dialogs/index.tsx |
| 组件 | 描述 | 平台 | 关键文件 |
|---|---|---|---|
| RootAppSidebar | 主导航侧边栏 | 所有 | packages/frontend/core/src/components/root-app-sidebar/index.tsx |
| PageDetailEditor | 核心编辑器包装器 | 所有 | packages/frontend/core/src/components/page-detail-editor.tsx |
| DetailPage | 文档编辑页面 | 桌面 | packages/frontend/core/src/desktop/pages/workspace/detail-page/detail-page.tsx |
| MobileDetailPage | 移动端文档页面 | 移动端 | packages/frontend/core/src/mobile/pages/workspace/detail/mobile-detail-page.tsx |
| WorkbenchLink | 导航组件 | 所有 | packages/frontend/core/src/modules/workbench/view/workbench-link.tsx |
| DocPeekPreview | 文档预览组件 | 所有 | packages/frontend/core/src/modules/peek-view/view/doc-preview/doc-peek-view.tsx |
AFFiNE 的前端架构设计为模块化、响应式且可适应不同平台,在优化特定设备功能的同时,提供一致的用户体验。