Skip to Content
指南快速开始

快速开始

这一页给你两个入口:

  • 先自己写一个最小 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_monitoropenapi_explorer,原因很直接:

  • 它足够小,阅读成本低
  • 它已经覆盖了当前 Ansiq 的核心链路
  • 它不依赖系统采样、远程 URL 或复杂数据模型
  • 它比“Hello World”更像一个真实应用

运行前的准备

你需要:

  • Rust toolchain
  • 能正常构建当前 workspace 的环境
  • 一个正常的交互式 terminal

在仓库根目录运行:

cargo check --workspace

如果这一步能通过,再运行示例。

运行后看什么

这个示例主要展示 4 件事:

  1. List 如何响应键盘选择
  2. runtime 如何做 focus traversal
  3. 选中态变化如何驱动 footer 更新
  4. 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