6 个版本

0.4.1 2023 年 6 月 19 日
0.4.0 2022 年 12 月 1 日
0.3.2 2022 年 11 月 30 日
0.1.0 2022 年 11 月 12 日

#122#real-time

每月 42 次下载

MIT/Apache

390KB
7.5K SLoC

JavaScript 5K SLoC // 0.0% comments Rust 2.5K SLoC // 0.0% comments

Submillisecond LiveView

使用 lunatic 框架构建的 Submillisecond 网页框架的 LiveView 实现。

什么是 LiveView?

LiveView 通过服务器渲染的 HTML 提供丰富的实时用户体验。

LiveView 的编程模型是声明式的:不是“当事件 X 发生时,更改页面的 Y”,LiveView 中的事件是常规消息,可能导致其状态发生变化。一旦状态发生变化,LiveView 将重新渲染其 HTML 模板的相关部分,并将其推送到浏览器,浏览器以最有效的方式更新自己。这意味着开发者将 LiveView 模板编写为任何其他服务器渲染的 HTML,LiveView 负责跟踪更改并将相关差异发送到浏览器。

它由 Elixir 的 Phoenix 网页框架推广。

先决条件

需要 Lunatic 运行时,以及 wasm32-wasi 目标。

cargo install lunatic-runtime
rustup target add wasm32-wasi

还建议添加一个 .cargo/config.toml 文件,其中包含构建目标和运行者配置。

# .cargo/config.toml

[build]
target = "wasm32-wasi"

[target.wasm32-wasi]
runner = "lunatic"

代码示例

use serde::{Deserialize, Serialize};
use submillisecond::{router, static_router, Application};
use submillisecond_live_view::prelude::*;

fn main() -> std::io::Result<()> {
    Application::new(router! {
        "/" => Counter::handler("index.html", "#app")
        "/static" => static_router!("./static")
    })
    .serve("127.0.0.1:3000")
}

#[derive(Clone, Serialize, Deserialize)]
struct Counter {
    count: i32,
}

impl LiveView for Counter {
    type Events = (Increment, Decrement);

    fn mount(_uri: Uri, _socket: Option<&mut Socket>) -> Self {
        Counter { count: 0 }
    }

    fn render(&self) -> Rendered {
        html! {
            button @click=(Increment) { "Increment" }
            button @click=(Decrement) { "Decrement" }
            p { "Count is " (self.count) }
        }
    }
}

#[derive(Deserialize)]
struct Increment {}

impl LiveViewEvent<Increment> for Counter {
    fn handle(state: &mut Self, _event: Increment) {
        state.count += 1;
    }
}

#[derive(Deserialize)]
struct Decrement {}

impl LiveViewEvent<Decrement> for Counter {
    fn handle(state: &mut Self, _event: Decrement) {
        state.count -= 1;
    }
}

运行示例

克隆仓库

git clone [email protected]:lunatic-solutions/submillisecond-live-view.git
cd submillisecond-live-view

运行示例

cargo run --example clock

许可证

根据您的选择,受以下其中一项许可证的约束:

依赖关系

~13–21MB
~286K SLoC