17个不稳定版本 (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日

#hobo中排名第5

Download history 30/week @ 2024-04-03 1/week @ 2024-06-05 2/week @ 2024-06-12

每月下载量83
2 crates中使用

MIT许可证

7KB
69

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)
        )
}

依赖项

~3MB
~57K SLoC