示例路线图
examples 已按文档路径重新分组。对外命令保持稳定,例如 cargo run --example counter;源码按学习路径放进子目录,并在根 Cargo.toml 里用 [[example]] 显式登记。
每个重要 example 都应该满足:
- 可以独立
cargo run --example name。 - 对应一篇教程或组件说明。
- 有可重复的 VHS tape。
- 录制产物放在
docs/public/recordings/。
| 分组 | 用途 | examples |
|---|---|---|
start | 入门和核心心智模型 | hello_world、counter |
hooks | 状态、副作用、异步数据 | async_state、atom_state |
core | 组件模型、Element DSL 和宏语法 | control_flow |
routing | shell、动态参数、history 和页面状态 | router |
input | 输入层、互斥、快捷键 | input_mutex |
components | 内置组件逐个展示,外加 theme 主题演示 | input、search_input、scrollview、wrapped_text、modal、confirm_modal、alert_modal、shortcut_info_modal、select、multi_select、tree_select、table、virtual_list、virtual_multi_select、theme |
advanced | 自定义 Hook、Provider、手写 Component、原生 widget 桥接 | custom_widget、custom_hook、custom_provider |
apps | 组合型完整 demo | todo_app |
Cargo 只能自动发现顶层 examples/name.rs 或 examples/name/main.rs。分组目录下的示例必须在根 Cargo.toml 里显式登记:
新增 example 时也应该同步文档页和 VHS tape,避免文档和可运行代码脱节。
旧的 list / custom_list 已被移除:普通选择看 Select / MultiSelect / VirtualList,原生 ratatui widget 桥接看 custom_widget。
| 目录 | examples | 状态 |
|---|---|---|
examples/start/ | hello_world、counter | 已登记到 Cargo.toml |
examples/hooks/ | async_state、atom_state | 已登记到 Cargo.toml |
examples/core/ | control_flow | 已登记到 Cargo.toml |
examples/routing/ | router | 已登记到 Cargo.toml |
examples/input/ | input_mutex | 已登记到 Cargo.toml |
examples/components/ | input、search_input、scrollview、wrapped_text、modal、confirm_modal、alert_modal、shortcut_info_modal、select、multi_select、tree_select、table、virtual_list、virtual_multi_select、theme | 已登记到 Cargo.toml |
examples/advanced/ | custom_widget、custom_hook、custom_provider | 已登记到 Cargo.toml |
examples/apps/ | todo_app | 已登记到 Cargo.toml |
| example | 文档 | 录制 |
|---|---|---|
hello_world | 快速开始 | docs/tapes/hello-world.tape |
counter | 计数器教程 | docs/tapes/counter.tape |
async_state | 异步数据三态 | docs/tapes/async-state.tape |
atom_state | Atom 全局状态 | docs/tapes/atom-state.tape |
control_flow | 控制流语法 | docs/tapes/control-flow.tape |
input_mutex | 输入互斥 | docs/tapes/input_mutex.tape |
scrollview | ScrollView 滚动容器 | docs/tapes/scrollview.tape |
wrapped_text | WrappedText 长文本 | docs/tapes/wrapped-text.tape |
input | Input 单行输入 | docs/tapes/input.tape |
search_input | SearchInput 搜索输入 | docs/tapes/search-input.tape |
modal | Modal 基础弹层 | docs/tapes/modal.tape |
confirm_modal | ConfirmModal 确认弹窗 | docs/tapes/confirm-modal.tape |
alert_modal | AlertModal 提示弹窗 | docs/tapes/alert-modal.tape |
shortcut_info_modal | ShortcutInfoModal 快捷键帮助 | docs/tapes/shortcut-info-modal.tape |
router | 路由工作台 | docs/tapes/router.tape |
select | Select 单选 | docs/tapes/select.tape |
multi_select | MultiSelect 多选 | docs/tapes/multi-select.tape |
tree_select | TreeSelect 树形选择 | docs/tapes/tree-select.tape |
table | Table 数据表格 | docs/tapes/table.tape |
virtual_list | VirtualList 虚拟列表 | docs/tapes/virtual-list.tape |
virtual_multi_select | Virtual Multi Select 虚拟多选 | docs/tapes/virtual-multi-select.tape |
todo_app | Todo App | docs/tapes/todo-app.tape |
custom_widget | 原生 Widget 桥接 | docs/tapes/custom-widget.tape |
custom_hook | 自定义 Hook | docs/tapes/custom-hook.tape |
custom_provider | 自定义 Provider | docs/tapes/custom-provider.tape |