15 个不稳定版本 (3 个重大变更)

0.4.0 2023 年 7 月 27 日
0.3.0 2022 年 10 月 21 日
0.2.2 2021 年 12 月 14 日
0.1.10 2020 年 8 月 13 日
0.1.8 2020 年 7 月 31 日

#1 in #hobo

Download history 10/week @ 2024-03-10 34/week @ 2024-03-31 1/week @ 2024-04-07

每月 78 次下载
2 crates 中使用

MIT 许可证

135KB
3K SLoC

hobo

Crate Info API Docs

hobo 是一个具有意见的、包含电池的 Rust 前端框架。在 稳定 Rust 上工作。
仍在开发中,尽管 GR Digital 已在生产中使用。
查看书籍!

显著特性

  • 无虚拟 DOM - HTML 元素只是添加到实体中的组件,可以直接通过 web_sys::HtmlElement 访问
  • 无模型-视图-更新(即 Elm 架构)- 状态管理是手动的,通常通过实体-组件关系实现
  • 无 HTML 宏 - 仅 Rust 函数
  • 内置基于宏的样式,类似于 CSS-in-JS,但只是 Rust
  • 响应性支持 通过 futures-signals
  • 基于实体-组件的方法,允许在不耦合或全局存储或状态的情况下,灵活地传播状态并在元素之间实现凝聚

预览

pub use hobo::{
    prelude::*,
    create as e,
    signals::signal::{Mutable, SignalExt}
};

fn counter() -> impl hobo::AsElement {
    let counter = Mutable::new(0);

    e::div()
        .class((
            css::display!(flex),
            css::flex_direction!(column),
            css::width!(400 px),
        ))
        .child(e::div()
            .text_signal(counter.signal().map(|value| {
                format!("Counter value is: {value}")
            }))
        )
        .child(e::button()
            .text("increment")
            .on_click(move |_| *counter.lock_mut() += 1)
        )
}

依赖项

~3.5MB
~72K SLoC