#web-apps #dom #html #web #web-framework

sauron-component-macro

用于构建客户端网页应用程序的 HTML 库

7 个版本

0.50.6 2022 年 8 月 19 日
0.50.5 2022 年 7 月 28 日

#152 in #dom

Download history 280/week @ 2024-03-13 190/week @ 2024-03-20 404/week @ 2024-03-27 443/week @ 2024-04-03 406/week @ 2024-04-10 387/week @ 2024-04-17 273/week @ 2024-04-24 193/week @ 2024-05-01 379/week @ 2024-05-08 439/week @ 2024-05-15 351/week @ 2024-05-22 392/week @ 2024-05-29 448/week @ 2024-06-05 235/week @ 2024-06-12 218/week @ 2024-06-19 406/week @ 2024-06-26

1,330 每月下载量

MIT 许可证

18KB
260

Maintenance

sauron

Latest Version Build Status MIT licensed

sauron

Sauron 是一个灵活的网页框架和库,用于构建客户端和/或服务器端网页应用程序,强调简洁性。它适合开发使用渐进式渲染的网页应用程序。

反例

在你的 src/lib.rs

use sauron::prelude::*;

#[derive(Debug)]
enum Msg {
    Click,
}

struct App {
    click_count: u32,
}

impl App {
    pub fn new() -> Self {
        App { click_count: 0 }
    }
}

impl Application<Msg> for App {
    fn view(&self) -> Node<Msg> {
        node! {
            <main>
                <h1>"Minimal example"</h1>
                <div class="some-class" id="some-id" {attr("data-id", 1)}>
                    <input class="client"
                            type="button"
                            value="Click me!"
                            key=1
                            on_click={|_| {
                                log::trace!("Button is clicked");
                                Msg::Click
                            }}
                    />
                    <div>{text(format!("Clicked: {}", self.click_count))}</div>
                    <input type="text" value={self.click_count}/>
                </div>
            </main>
        }
    }

    fn update(&mut self, msg: Msg) -> Cmd<Self, Msg> {
        log::trace!("App is updating with msg: {:?}", msg);
        match msg {
            Msg::Click => self.click_count += 1,
        }
        Cmd::none()
    }
}

#[wasm_bindgen(start)]
pub fn main() {
    console_log::init_with_level(log::Level::Trace).unwrap();
    console_error_panic_hook::set_once();
    Program::mount_to_body(App::new());
}

index.html

<html>
  <head>
    <meta content="text/html;charset=utf-8" http-equiv="Content-Type"/>
    <title>Counter</title>
    <style type="text/css">
        body { font-family: verdana, arial, monospace; }
        main {
            width:30px;
            height: 100px;
            margin:auto;
            text-align: center;
        }
        input, .count{
            font-size: 40px;
            padding: 30px;
        }
    </style>
    <script type=module>
        import init from './pkg/counter.js';
        await init().catch(console.error);
    </script>
  </head>
  <body>
  </body>
</html>

Cargo.toml 中,指定 crate-type 为 cdylib

[package]
name = "counter"
version = "0.1.0"
edition = "2018"

[lib]
crate-type = ["cdylib"]

[dependencies]
sauron = "0.50.0"

先决条件

cargo install wasm-pack
cargo install basic-http-server

使用

wasm-pack build --target web --release

提供服务

basic-http-server -a 0.0.0.0:4000

然后导航到 https://127.0.0.1:4000

查看 getting-started.md 以获取完整的教程。

有关构建和服务的命令的更多详细信息,请查看此仓库中的 示例,每个示例都有构建和运行的脚本。

演示示例

  • todomvc todomvc 示例
  • data-viewer - 可调整大小的电子表格 CSV 数据查看器
  • svg-clock - 使用 SVG 和窗口滴答事件绘制的时钟
  • ultron 代码编辑器 - 具有语法高亮的基于网页的文本编辑器
  • hackernews-sauron - 展示 Sauron 功能的 Hackernews 模拟,可以与或没有 JavaScript 一起使用

许可证: MIT

依赖项

~3.5MB
~75K SLoC