快速开始
这一页给你两个入口:
- 先自己写一个最小 app
- 先运行一个稳定示例
如果你是第一次接触 Ansiq,我建议先看前者,再跑后者。
如果你还没有从 crates.io 安装过 ansiq,先读 安装。
路径一:先写一个最小 app
下面这个例子不是 showcase,只是一个能真正跑起来的最小应用:
use ansiq::prelude::*;
use ansiq::{run_app, view};
#[derive(Clone, Debug)]
enum Message {
Submit(String),
}
#[derive(Default)]
struct QuickStartApp {
submitted: String,
}
impl App for QuickStartApp {
type Message = Message;
fn render(&mut self, cx: &mut ViewCtx<'_, Self::Message>) -> Element<Self::Message> {
let draft = cx.signal(|| String::new());
let current = draft.get();
view! {
<Paragraph text={"Type something and press Enter"} />
<Input
value={current.clone()}
on_change={{
let draft = draft.clone();
move |next| draft.set_if_changed(next)
}}
on_submit={|next| Some(Message::Submit(next))}
/>
<Paragraph text={format!("Last submit: {}", self.submitted)} />
}
}
fn update(&mut self, message: Self::Message, _handle: &RuntimeHandle<Self::Message>) {
let Message::Submit(next) = message;
self.submitted = next;
}
}
#[tokio::main(flavor = "multi_thread")]
async fn main() -> std::io::Result<()> {
run_app(QuickStartApp::default()).await
}这个例子已经包含了 Ansiq 最关键的几件事:
- 一个
App - 一个局部
signal - 一个
Input - 一次消息流转
- 一次可见的 UI 更新
如果你想先理解“代码最小形态下 Ansiq 到底怎么工作”,下一页 第一个应用 会把这个模型继续讲透。
路径二:先运行一个稳定示例
如果你只想尽快看到 Ansiq 跑起来,当前最好的入口是 list_navigation 示例。
cargo run -p ansiq-examples --example list_navigation这个示例是文档入口,而不是 activity_monitor 或 openapi_explorer,原因很直接:
- 它足够小,阅读成本低
- 它已经覆盖了当前 Ansiq 的核心链路
- 它不依赖系统采样、远程 URL 或复杂数据模型
- 它比“Hello World”更像一个真实应用
运行前的准备
你需要:
- Rust toolchain
- 能正常构建当前 workspace 的环境
- 一个正常的交互式 terminal
在仓库根目录运行:
cargo check --workspace如果这一步能通过,再运行示例。
运行后看什么
这个示例主要展示 4 件事:
List如何响应键盘选择- runtime 如何做 focus traversal
- 选中态变化如何驱动 footer 更新
- widget 交互如何通过 runtime 路由,而不是直接在 app 外层硬编码
你可以实际试这些按键:
Up/Down:移动选中项Tab:切换焦点Shift-Tab:反向切换焦点
读代码时先看哪两个文件
examples/examples/list_navigation.rs
examples/src/scenarios/list_navigation.rs建议先看入口文件,再看真正的场景实现。
入口文件负责什么
入口文件只负责:
- 选定一个场景
- 调用
run_app(...)
场景文件负责什么
场景文件负责:
- app state
- render
- update
- widget 组合
这也是你后面自己写 Ansiq 应用时最推荐的组织方式。
这个示例实际触发了哪些框架能力
即使它很小,也已经走通了这条主链:
keyboard input
-> runtime routing
-> widget state change
-> dirty subtree / redraw
-> framebuffer diff
-> terminal patch所以它不是一个“假的最小例子”,而是一个小但真实的 app。
常见误区
为什么不用 activity_monitor 当 quick start?
因为 activity_monitor 更像 showcase:
- 它有固定 shell
- 有实时采样
- 有复杂 table
- 有多个 tabs
作为 showcase 很好,但不适合作为第一印象。
为什么不直接写一个更小的 hello world?
可以写,但那种例子往往太小,反而学不到 Ansiq 的 runtime-first 特性。
list_navigation 刚好卡在一个比较合理的平衡点上。
下一步
如果你刚才先跑了示例,下一步回到 第一个应用,把它和你刚看到的行为对起来。
如果你已经先读过“第一个应用”,那现在就可以把 list_navigation 当成第一个完整示例来读。
Last updated on