2 个不稳定版本

0.2.0 2021年8月7日
0.1.0 2021年8月4日

#110 in #rocket

MIT 许可证

14KB
249

Inertia.rs

Current Crates.io Version Build Status docs.rs

Inertia.js 的 Rust 实现。目前支持 Rocket

为什么选择 Inertia?

来自 inertiajs.com

Inertia 是一种构建经典服务器驱动型网页应用的新方法。我们称之为现代单体。

Inertia 允许你创建完全由客户端渲染的单页应用,而不需要太多现代单页应用的复杂性。这是通过利用现有的服务器端框架来实现的。

Inertia 没有客户端路由,也不需要 API。只需像以前一样构建控制器和页面视图即可!

Inertia.rs 将 Rust 中的集成变得简单直接。

安装

将以下行添加到你的 Cargo.toml

inertia_rs = { version = "0.2.0", features = ["rocket"] }

用法

inertia_rs 为在 Rocket 中创建 Inertia.js 应用定义了一个简洁的接口。它由两个元素组成,

  • Inertia<T>

    一个泛型 TResponder,这是 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