2 个版本

0.0.2-alpha2023 年 5 月 18 日
0.0.1-alpha2023 年 5 月 7 日

#25#rocket-framework

43 每月下载量

MIT 许可证

315KB
8K SLoC

hashira

CI-badge Latest Version Docs

基于 yew 构建的服务器端渲染框架。

入门

要使用 hashira 创建项目,您需要安装 CLI。

cargo install --force hashira-cli

创建新项目

使用 hashira new 可以创建新项目,CLI 将提示您使用模板和项目名称。

您还可以使用快捷方式创建新项目

hashira new --{{template}} --name {{name}}

目前可用的模板有

  • actix-web
  • axum
  • rocket
  • deno

未来还将添加更多。或者如果您想为您的项目创建适配器,请查看代码,大多数模板只是使用一个启动服务器的适配器,您可以在 /packages/adapters 中查看适配器。

此项目仍处于 alpha 阶段

hashira 仍处于 alpha 阶段,这意味着

  • 一些功能可能不完整
  • 一些功能可能会被移除

功能

SSR (服务器端渲染)

允许在服务器上渲染您的 yew 组件,并从服务器传递属性。

async fn render_page(ctx: RenderContext) -> Result<Response> {
    let products = get_products().await?;
    let res = ctx.render_with_props(ProductsPageProps { products }).await;
    Ok(res)
}

#[page_component("/products", render = "render_page")]
fn ProductsPage(props: &ProductsPageProps) -> yew::Html {
    yew::html! {
        // ...
    }
}

服务器操作

从您的组件执行服务器中的代码。

struct CreateProduct {
    name: String,
    price: i64,
    description: Option<String>
}

#[action("/api/products/create")]
async fn CreateProductAction(form: Form<CreateProduct>) -> Json<Product> {
    // server side logic
}

#[page_component("/products/add", render = "...")]
fn CreateProductPage() -> yew::Html {
    let action = use_action();

    if action.is_loading() {
        return yew::html! {
            "Creating product..."
        };
    }

    yew::html! {
        <Form<CreateProductAction> action={action.clone()}>
            <input name="name" required={true} />
            <input name="price" required={true} />
            <textarea name="description" rows={4}></textarea>
        </Form<CreateProductAction>>
    }
}

提取器

渲染函数和服务器操作允许注入实现 FromRequest 的任何参数。

#[action("/api/products/create")]
async fn CreateProductAction(
    form: Form<CreateProduct>,
    headers: HeadersMap,
    method: Method,
    Inject(pool): Inject<MySqlPool>) -> Json<Product> {
    // server side logic
}

依赖项

~24–60MB
~1M SLoC