前端应用
前端应用
相关源文件
本章引用的主要源码文件:
web/package-lock.jsonweb/package.jsonweb/src/app.tsxweb/src/components/ui/badge.tsxweb/src/components/ui/button.tsxweb/src/components/ui/radio-group.tsxweb/src/components/ui/radio.tsxweb/src/components/ui/segmented.tsxweb/src/constants/common.tsweb/src/hooks/logic-hooks/navigate-hooks.tsweb/src/locales/config.tsweb/src/pages/agents/agent-templates.tsxweb/src/pages/agents/create-agent-dialog.tsxweb/src/pages/agents/create-agent-form.tsxweb/src/pages/agents/index.tsxweb/src/pages/agents/template-card.tsxweb/src/pages/agents/template-sidebar.tsxweb/src/pages/datasets/dataset-card.tsxweb/src/pages/datasets/index.tsxweb/src/pages/home/applications.tsxweb/src/pages/home/banner.tsxweb/src/pages/home/datasets.tsxweb/src/pages/home/index.tsxweb/src/pages/next-chats/chat-card.tsxweb/src/pages/next-chats/hooks/use-rename-chat.tsweb/src/pages/next-chats/index.tsxweb/src/pages/next-searches/hooks.tsweb/src/pages/next-searches/index.tsxweb/src/pages/next-searches/search-card.tsxweb/src/routes.tsxweb/src/services/search-service.tsweb/src/utils/authorization-util.tsweb/src/wrappers/auth.tsxweb/tailwind.config.jsweb/tailwind.css
RAGFlow 前端是一个基于 React 的现代 Web 应用,使用 Vite 构建,为所有系统功能(包括数据集管理、聊天助手、智能体工作流和搜索界面)提供用户界面。该应用强调国际化(支持 13 种以上语言)、主题化(亮色/暗色模式)以及采用混合 UI 库方法的组件驱动架构。
关于特定前端子系统的详细信息,请参见国际化系统、UI 组件架构、主题系统和页面结构与状态管理。关于后端 API 集成,请参见后端 API 系统和API 架构与 SDK。
技术栈
前端基于以下核心技术构建:
| 类别 | 技术 | 版本 | 用途 |
|---|---|---|---|
| 构建工具 | Vite | 7.2.7 | 开发服务器和生产打包器 [web/package.json:191] |
| 框架 | React | 18.2.0 | UI 组件库 [web/package.json:104] |
| 路由 | React Router | 7.10.1 | 客户端路由 [web/package.json:118] |
| UI 库 | Ant Design | 5.x | 丰富的组件库(ProComponents) [web/package.json:32-34] |
| Radix UI | 1.x | 无头可访问原语 [web/package.json:41-66] | |
| Tailwind CSS | 3.x | 实用优先的样式 [web/package.json:187] | |
| 状态管理 | React Query | 5.40.0 | 服务端状态缓存 [web/package.json:68] |
| Zustand | 4.5.2 | 客户端状态管理 [web/package.json:137] | |
| 国际化 | i18next | 23.7.16 | 翻译框架 [web/package.json:88] |
| 可视化 | React Flow | 12.3.6 | 基于节点的智能体画布编辑器 [web/package.json:74] |
| 类型系统 | TypeScript | 5.9.3 | 静态类型检查 [web/package.json:190] |
来源: [web/package.json:1-199]
应用入口点与提供者层级
提供者架构
该应用使用嵌套的提供者层级来为所有组件提供全局上下文。AppContainer 作为顶层入口点,将应用包裹在一系列功能提供者中。
标题:前端提供者层级
来源: [web/src/app.tsx:57-113]
关键提供者职责
QueryClientProvider[web/src/app.tsx:88]:配置 React Query,使用一个禁用了refetchOnWindowFocus并将retry默认设置为 2 的queryClient[web/src/app.tsx:57-64]。ThemeProvider[web/src/app.tsx:89]:使用next-themes管理应用主题。它默认使用ThemeEnum.Dark,并将选择持久化存储在ragflow-ui-theme中[web/src/app.tsx:90-91]。RootProvider[web/src/app.tsx:78]:在挂载时通过storage.getLanguage()和changeLanguageAsync()从存储中初始化语言设置[web/src/app.tsx:79-84]。TooltipProvider[web/src/app.tsx:87]:通过@radix-ui/react-tooltip为 Radix UI 工具提示提供无障碍上下文[web/package.json:66]。
来源: [web/src/app.tsx:57-113]
路由与导航
该应用使用集中式导航系统。路由在 web/src/routes.tsx 中使用 createBrowserRouter 定义 [web/src/routes.tsx:3-7]。导航逻辑封装在 useNavigatePage 钩子中 [web/src/hooks/logic-hooks/navigate-hooks.ts:12]。
| 路由名称 | 路径 | 组件 |
|---|---|---|
Routes.Root | / | layouts/root-layout [web/src/routes.tsx:149] |
Routes.Datasets | /datasets | pages/datasets [web/src/routes.tsx:178] |
Routes.Chats | /chats | pages/next-chats [web/src/routes.tsx:208] |
Routes.Agents | /agents | pages/agents [web/src/routes.tsx:221] |
Routes.Memories | /memories | pages/memories [web/src/routes.tsx:230] |
标题:路由导航映射
来源: [web/src/routes.tsx:12-77], [web/src/hooks/logic-hooks/navigate-hooks.ts:12-227]
状态管理架构
RAGFlow 使用混合状态管理策略来优化不同数据生命周期:
- 服务端状态:通过
@tanstack/react-query管理[web/package.json:68]。例如,useFetchNextKnowledgeListByPage处理知识库的分页列表[web/src/pages/datasets/index.tsx:8]。 - 客户端状态:通过
Zustand管理[web/package.json:137]。这用于复杂的 UI 状态,例如智能体工作流编辑器和共享的应用状态。 - 持久化状态:用户偏好(如语言)通过一个包装了
localStorage的授权工具类进行存储[web/src/locales/config.ts:109]。
来源: [web/src/app.tsx:57-64], [web/src/locales/config.ts:109], [web/package.json:137]
UI 组件架构
前端遵循多层组件策略:
- 原语:位于
web/src/components/ui/的 Radix UI 和自定义组件(例如Button、Badge、Card)[web/src/pages/datasets/index.tsx:6-7]。 - 功能组件:专用组件,如
DatasetCard[web/src/pages/datasets/index.tsx:99] 或用于智能体模板的TemplateCard[web/src/pages/agents/agent-templates.tsx:106]。 - 复杂集成:与
@xyflow/react集成用于智能体画布[web/package.json:74],以及与jsoneditor集成用于配置[web/package.json:94]。
更多详情,请参见 UI 组件架构。
来源: [web/src/pages/datasets/index.tsx:1-159], [web/package.json:74-94]
国际化(i18n)
该系统通过 i18next 支持 13 种以上语言 [web/package.json:88]。
- 支持的语言:包括英语、简体中文、繁体中文、葡萄牙语、俄语、印度尼西亚语、西班牙语、越南语、日语、德语、法语、意大利语、保加利亚语、阿拉伯语和土耳其语
[web/src/constants/common.ts:81-97]。 - 检测:使用
i18next-browser-languagedetector检测用户偏好,优先使用localStorage[web/src/locales/config.ts:64-67]。 - 懒加载:通过
loadLanguageAsync异步加载语言以优化性能[web/src/locales/config.ts:77-97]。
更多详情,请参见国际化系统。
来源: [web/src/locales/config.ts:1-123], [web/src/constants/common.ts:81-115]
主题系统
主题使用 Tailwind CSS 和 CSS 变量实现。该系统通过 .dark 选择器支持原生暗色模式 [web/tailwind.css:137]。
- Tailwind 配置:定义了一组丰富的语义颜色,如
accent-primary、bg-canvas和text-secondary[web/tailwind.config.js:81-114]。 - CSS 变量:在
tailwind.css中为亮色(根)和暗色主题映射[web/tailwind.css:6-216]。
更多详情,请参见主题系统。
来源: [web/tailwind.css:1-216], [web/tailwind.config.js:1-184]