关于 gpui
gpui 是面向 GPUI 桌面应用开发的实践指南,适合编写视图、组件及应用逻辑的开发者。内容按影响优先级组织,涵盖渲染、状态、事件、异步处理和反模式。
主要功能
- 01涵盖 8 类开发规则
- 02按影响优先级排列
- 03提供渲染与组件指导
- 04说明状态和事件处理
- 05列出异步任务反模式
适用场景
- 01开发 GPUI 视图与组件
- 02实现 Entity 状态管理
- 03处理事件和键盘快捷键
- 04测试 GPUI 应用
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ aprilnea/ gpui-skills --skill gpui安装后在 Claude Code 中输入/gpui确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
rules/_sections.mdanti-circular-reference.mdanti-drop-subscription.mdanti-drop-task.mdanti-missing-notify.mdanti-silent-error.mdanti-unwrap.mdasync-background-spawn.mdasync-debounce.mdasync-task-lifecycle.mdasync-weak-entity.mdcomp-dialog.mdcomp-focus-ring.mdcomp-stateless.mdcomp-traits.mdcore-context-types.mdcore-entity-operations.mdcore-ownership-model.mdcore-weak-entity.mdevent-actions.mdevent-focus.mdevent-listener.mdrender-builder-pattern.mdrender-conditional.mdrender-element-composition.mdrender-render-vs-renderonce.mdstate-notify.mdstyle-elevation.mdstyle-flexbox.mdstyle-theme-colors.md详细介绍
GPUI 最佳实践
构建 GPUI 桌面应用的综合指南。GPUI 是为 Zed 编辑器提供支持的 UI 框架。包含 8 个类别、40 多条规则,并按影响程度排序。
适用场景
遇到以下情况时,请参考这些指南:
- 编写新的 GPUI 视图或组件
- 使用 Entity 实现状态管理
- 处理事件和键盘快捷键
- 使用异步任务和后台工作
- 构建表单、列表或对话框
- 使用类似 Tailwind 的 API 为组件设置样式
- 测试 GPUI 应用
按优先级划分的规则类别
| 优先级 | 类别 | 影响程度 | 前缀 |
|---|---|---|---|
| 1 | 核心概念 | CRITICAL | core- |
| 2 | 渲染 | CRITICAL | render- |
| 3 | 状态管理 | HIGH | state- |
| 4 | 事件处理 | HIGH | event- |
| 5 | 异步与并发 | MEDIUM-HIGH | async- |
| 6 | 样式 | MEDIUM | style- |
| 7 | 组件 | MEDIUM | comp- |
| 8 | 反模式 | CRITICAL | anti- |
快速参考
1. 核心概念(CRITICAL)
core-ownership-model- 理解 GPUI 的单一所有权模型core-entity-operations- 正确使用 read/update/observe/subscribecore-weak-entity- 使用 WeakEntity 打破循环引用core-context-types- 了解何时使用 App、Context、AsyncApp
2. 渲染(CRITICAL)
render-render-vs-renderonce- 有状态视图选择 Render,组件选择 RenderOncerender-element-composition- 使用 div() 和方法链构建元素树render-conditional- 使用 .when() 和 .when_some() 实现条件样式render-shared-string- 使用 SharedString 避免复制字符串render-builder-pattern- 使用构建器模式设计组件
3. 状态管理(HIGH)
state-notify- 状态更改后务必调用 cx.notify()state-observe- 使用 cx.observe() 响应 Entity 更改state-subscribe- 使用 cx.subscribe() 处理类型化事件state-global- 使用 Global trait 管理应用级状态state-keyed-state- 使用 window.use_keyed_state() 保存持久状态
4. 事件处理(HIGH)
event-actions- 定义并注册键盘快捷键对应的操作event-listener- 使用 cx.listener() 处理绑定到视图的事件event-focus- 使用 FocusHandle 和 key_context 管理焦点event-propagation- 理解事件冒泡和 stop_propagation
5. 异步与并发(MEDIUM-HIGH)
async-task-lifecycle- 存储或分离任务,防止任务取消async-debounce- 使用计时器和任务替换实现防抖async-background-spawn- 使用 background_spawn 处理 CPU 密集型工作async-weak-entity- 使用 WeakEntity 安全地跨 await 访问数据async-error-handling- 使用 .log_err() 和 .detach_and_log_err()
6. 样式(MEDIUM)
style-flexbox- 使用 h_flex() 和 v_flex() 设置布局style-theme-colors- 务必使用 cx.theme() 获取颜色style-spacing- 使用 DynamicSpacing 实现自适应间距style-elevation- 使用 elevation 系统设置分层表面
7. 组件(MEDIUM)
comp-stateless- 优先使用带有 #[derive(IntoElement)] 的 RenderOncecomp-traits- 实现 Disableable、Selectable、Sizable traitscomp-focus-ring- 添加焦点环以提升无障碍性comp-dialog- 使用 WindowExt 管理对话框comp-variant- 使用变体枚举设置组件样式
8. 反模式(CRITICAL)
anti-silent-error- 绝不要使用 let _ = 静默丢弃错误anti-drop-task- 绝不要丢弃 Task,务必存储或分离anti-drop-subscription- 务必分离或存储订阅anti-circular-reference- 避免 Entity 循环,使用 WeakEntityanti-missing-notify- 状态更改后绝不要忘记调用 cx.notify()anti-unwrap- 避免使用 unwrap(),改用 ? 或显式处理
架构概述
┌─────────────────────────────────────────────────────────┐
│ Application (App) │
│ (Single owner of all Entities) │
└─────────────────────────────────────────────────────────┘
│
┌───────────────────┼───────────────────┐
│ │ │
┌───────────┐ ┌───────────┐ ┌──────────┐
│ Entity<A> │ │ Entity<B> │ │ Global<C>│
└───────────┘ └───────────┘ └──────────┘
│ │ │
│ read/update │ read/update │ via App
│ via Context<A> │ via Context<B> │
│
┌─────────────────────────────────────────────────┐
│ UI Rendering (Render trait) │
│ Each frame: fn render(&mut self, ...) │
│ Returns: impl IntoElement (Element tree) │
└─────────────────────────────────────────────────┘
│
├─ observe() → changes trigger render
├─ subscribe() → events trigger reactions
├─ notify() → signal changes
└─ emit() → send typed events
如何使用
阅读各个规则文件,了解详细说明和代码示例:
rules/core-ownership-model.md
rules/render-render-vs-renderonce.md
rules/anti-silent-error.md
每个规则文件都包含:
- 简要说明其重要性
- 错误代码示例及说明
- 正确代码示例及说明
- 补充背景信息和参考资料
评论
支持 Markdown