12 个版本 (6 个重大变更)
使用旧的 Rust 2015
0.7.0 | 2019 年 1 月 8 日 |
---|---|
0.6.1 | 2018 年 10 月 19 日 |
0.5.4 | 2018 年 7 月 23 日 |
0.1.0 | 2018 年 3 月 29 日 |
#5 in #asmjs
每月 31 次下载
10KB
134 行
squark
虚拟 DOM 实现,以及应用程序和运行时的定义。
特性
此仓库包含
- 纯 Rust 虚拟 DOM 实现
- 受 HyperApp 启发的应用程序定义
- 处理虚拟 DOM 差异的运行时定义
- 针对多个平台的运行时实现
- 通过 wasm-bindgen 为网页浏览器提供
- Rustic 世界的服务器端渲染 (现在正在工作)
- 类似于 JSX 的宏,帮助编写视图
目前,我们依赖于 nightly
频道
squark-macros
通过 proc_marco
和 pest 解析器提供 JSX 类似宏的包。
语法
view! {
<button class="some-class" onclick={ |_| Some(Action::Submit) }>
Button!
</button>
}
我们可以在编译时生成原生 Rust 表达式。
squark-web
使用 wasm-bindgen 为网页浏览器提供的运行时实现。
这里是一个计数器应用的完整示例!
#![feature(proc_macro_hygiene)]
extern crate squark;
extern crate squark_macros;
extern crate squark_web;
extern crate wasm_bindgen;
extern crate web_sys;
use squark::{App, Runtime, View};
use squark_macros::view;
use squark_web::WebRuntime;
use wasm_bindgen::prelude::*;
use web_sys::window;
#[derive(Clone, Debug, PartialEq)]
struct State {
count: isize,
}
impl State {
pub fn new() -> State {
State { count: 0 }
}
}
#[derive(Clone, Debug)]
enum Action {
ChangeCount(isize),
}
#[derive(Clone, Debug)]
struct CounterApp;
impl App for CounterApp {
type State = State;
type Action = Action;
fn reducer(&self, mut state: State, action: Action) -> State {
match action {
Action::ChangeCount(c) => {
state.count = c;
}
};
state
}
fn view(&self, state: State) -> View<Action> {
let count = state.count;
view! {
<div>
{ count.to_string() }
<button onclick={ move |_| Some(Action::ChangeCount(count.clone() + 1)) }>
increment
</button>
<button onclick={ move |_| Some(Action::ChangeCount(count - 1)) }>
decrement
</button>
</div>
}
}
}
impl Default for CounterApp {
fn default() -> CounterApp {
CounterApp
}
}
#[wasm_bindgen]
pub fn run() {
WebRuntime::<CounterApp>::new(
window()
.unwrap()
.document()
.expect("Failed to get document")
.query_selector("body")
.unwrap()
.unwrap(),
State::new(),
)
.run();
}
项目目录位于 examples/counter。
还有一个 TodoMVC 示例在 examples/todomvc,并在 https://rail44.github.io/squark/ 上工作。
依赖关系
~2.1–2.9MB
~58K SLoC