# svelte-reactivity-demo **Repository Path**: feng3d_admin/svelte-reactivity-demo ## Basic Information - **Project Name**: svelte-reactivity-demo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-24 - **Last Updated**: 2025-06-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Svelte + @feng3d/reactivity 示例项目 这是一个使用 Svelte 3.49.0、TypeScript 和 @feng3d/reactivity 构建的示例项目,展示了如何通过响应式系统实现 UI 与业务逻辑的完全分离。 ## 🚀 核心特性 - **Svelte 3.49.0** - 轻量级响应式框架 - **TypeScript** - 完整的类型支持 - **@feng3d/reactivity** - 强大的响应式系统 - **UI与逻辑分离** - 清晰的架构设计 - **现代化 UI** - 美观的渐变背景和毛玻璃效果 - **响应式设计** - 适配不同屏幕尺寸 - **无障碍访问** - 符合 A11y 标准 ## 🏗️ 架构设计 ### 核心概念 本项目采用了一种创新的架构模式,将 Svelte 的 UI 渲染能力与 @feng3d/reactivity 的响应式系统相结合,实现了真正的关注点分离: ``` ┌─────────────────┐ ┌─────────────────────┐ ┌─────────────────┐ │ UI Layer │ │ Reactive Layer │ │ Logic Layer │ │ (Svelte) │◄──►│ (@feng3d/reactivity) │◄──►│ (TypeScript) │ │ │ │ │ │ │ │ • 组件模板 │ │ • 响应式状态管理 │ │ • 业务逻辑 │ │ • 样式定义 │ │ • 计算属性 │ │ • 数据处理 │ │ • 事件绑定 │ │ • 副作用管理 │ │ • API 调用 │ └─────────────────┘ └─────────────────────┘ └─────────────────┘ ``` ### 技术栈详解 #### 1. @feng3d/reactivity 响应式系统 @feng3d/reactivity 是一个高性能的响应式库,提供了: - **reactive()** - 将普通对象转换为响应式对象 - **effect()** - 创建响应式副作用 - **computed()** - 创建计算属性 - **ref()** - 创建响应式引用 #### 2. Svelte UI 层 Svelte 负责: - 组件模板渲染 - 样式管理 - 事件处理 - 生命周期管理 #### 3. TypeScript 逻辑层 TypeScript 提供: - 类型安全 - 接口定义 - 业务逻辑封装 - 代码组织 ## 📦 项目结构 ``` svelte_demo/ ├── src/ │ ├── components/ │ │ ├── Counter.svelte # 计数器组件 │ │ ├── UserCard.svelte # 用户卡片组件 │ │ ├── TodoList.svelte # 待办事项列表 │ │ └── ToggleButton.svelte # 切换按钮组件 │ ├── App.svelte # 主应用组件 (UI层) │ ├── App.ts # 应用逻辑 (逻辑层) │ └── main.ts # 应用入口 ├── index.html # HTML 模板 ├── package.json # 项目配置 ├── tsconfig.json # TypeScript 配置 ├── vite.config.ts # Vite 配置 └── README.md # 项目说明 ``` ## 🔧 核心实现 ### 1. 响应式状态管理 (App.ts) ```typescript import { effect, reactive } from '@feng3d/reactivity'; export class App { readonly currentTime: string = ''; readonly isDarkMode: boolean = false; readonly count: number = 0; readonly name: string = '世界'; readonly todos: readonly Todo[] = []; readonly completedTodos: number = 0; readonly totalTodos: number = 0; readonly progress: number = 0; init() { const r_this = reactive(this); // 响应式副作用 effect(() => { r_this.completedTodos = r_this.todos.filter(todo => todo.completed).length; }); effect(() => { r_this.totalTodos = r_this.todos.length; }); effect(() => { r_this.progress = r_this.totalTodos > 0 ? (r_this.completedTodos / r_this.totalTodos) * 100 : 0; }); } } ``` ### 2. UI 层集成 (App.svelte) ```svelte