安装
这一页只做一件事:让你用 crates.io 上的 ansiq 在一个全新的 Cargo 项目里跑起第一个应用。
如果你还没有 Rust,请先安装官方工具链,再回到这页继续。
前置条件
先确认本机已经有 Rust 和 Cargo:
rustc --version
cargo --version如果这两个命令都能正常输出版本号,就可以继续。
创建项目
Ansiq 不需要自定义模板。一个普通的二进制 crate 就够了:
cargo new hello-ansiq
cd hello-ansiq添加依赖
接下来安装 ansiq 和 tokio:
cargo add ansiq
cargo add tokio --features macros,rt-multi-thread这里引入 tokio 的原因不是“额外高级功能”,而是因为 Ansiq 应用本身运行在异步 runtime 里。后面你会用到消息发送、后台任务和流式输出,这一层提前准备好会更自然。
写入第一个应用
把 src/main.rs 改成下面这样:
use ansiq::prelude::*;
use ansiq::{run_app, view};
#[derive(Clone, Debug)]
enum Message {
Submit(String),
}
#[derive(Default)]
struct HelloApp {
submitted: String,
}
impl App for HelloApp {
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(HelloApp::default()).await
}这段代码已经包含了 Ansiq 的最小主路径:
- 一个
App - 一个局部
signal - 一个
Input - 一次
Message - 一次可见的 UI 更新
运行
现在直接运行:
cargo run如果一切正常,你会看到一个简单的终端界面。输入文本并按 Enter 后,最后一次提交的内容会显示在下面。
下一步
Last updated on