2 个不稳定版本
0.2.0 | 2021年8月7日 |
---|---|
0.1.0 | 2021年8月4日 |
#110 in #rocket
14KB
249 行
Inertia.rs
Inertia.js 的 Rust 实现。目前支持 Rocket。
为什么选择 Inertia?
Inertia 是一种构建经典服务器驱动型网页应用的新方法。我们称之为现代单体。
Inertia 允许你创建完全由客户端渲染的单页应用,而不需要太多现代单页应用的复杂性。这是通过利用现有的服务器端框架来实现的。
Inertia 没有客户端路由,也不需要 API。只需像以前一样构建控制器和页面视图即可!
Inertia.rs 将 Rust 中的集成变得简单直接。
安装
将以下行添加到你的 Cargo.toml
inertia_rs = { version = "0.2.0", features = ["rocket"] }
用法
inertia_rs
为在 Rocket 中创建 Inertia.js 应用定义了一个简洁的接口。它由两个元素组成,
-
Inertia<T>
一个泛型
T
的 Responder,这是 Inertia 组件的属性 -
VersionFairing
负责检查资源版本。通过
VersionFairing::new
构建,它接收资源版本和一个生成 Inertia 的 HTML 模板的闭包。
示例 Rocket 服务器
#[macro_use]
extern crate rocket;
use inertia_rs::rocket::{Inertia, VersionFairing};
use rocket::response::Responder;
use rocket_dyn_templates::Template;
#[derive(serde::Serialize)]
struct Hello {
some_property: String,
}
#[get("/hello")]
fn hello() -> Inertia<Hello> {
Inertia::response(
// the component to render
"hello",
// the props to pass our component
Hello { some_property: "hello world!".into() },
)
}
#[launch]
fn rocket() -> _ {
rocket::build()
.mount("/", routes![hello])
.attach(Template::fairing())
// Version fairing is configured with current asset version, and a
// closure to generate the html template response
// `ctx` contains `data_page`, a json-serialized string of
// the inertia props
.attach(VersionFairing::new("1", |request, ctx| {
Template::render("app", ctx).respond_to(request)
}))
}
依赖项
~16–49MB
~791K SLoC