1 个不稳定版本
0.0.0 | 2019 年 5 月 30 日 |
---|
#27 in #wasm-framework
56KB
1.5K SLoC
Mika
Mika 是一个用于前端 wasm 应用程序的实验性、有偏见的框架,基于 futures-signals
和 wasm-bindgen
。 Mika
受 Dominator 的启发。
与 Dominator 比较
Dominator |
Mika |
|
---|---|---|
状态 | "它通常功能完整 [...]" - 引自其 README | 实验性。还没有一行测试代码。它只是足够运行 TodoMVC 的部分版本(没有路由,没有持久存储) |
基于 | Stdweb (stdweb 现在也基于 wasm-bindgen) | 直接使用 wasm-bindgen |
更新和渲染的分离。 | 按设计,不是! 但可以轻松添加。 | 是的,它 试图 帮助用户分离应用程序视图渲染器和应用程序状态更新器。尽管无法阻止用户将应用程序状态修改代码插入到渲染中,但至少,Mika 为用户提供了将此类代码从渲染器中提取出来的方法。 |
DOM 构建 | html!("div", {.class("some-class"), [...chilren...]}) | Div::new().class("some-class").child(...).child(...) |
优缺点
最大的优点和最大的缺点都来自 futures-signals
。
优点
futures-signals
有助于触发响应应用程序中更改的正确代码部分。(与虚拟 DOM 方法相比,虚拟 DOM 方法必须遍历整个虚拟 DOM 来找到差异)
缺点
- 你必须学习
futures-signals
。 - 由于
futures-signals
,你发现自己更频繁地与借用检查器作斗争。
构建和提供服务
- 你必须 安装 Rust
rustup install nightly
(futures-signals 使用 futures 0.3 构建,需要 nightly)rustup target add wasm32-unknown-unknown --toolchain=nightly
(因为我们为网页浏览器构建)cargo install wasm-bindgen-cli
(Mika
是在wasm-bindgen
之上构建的)cargo install simi-cli
(Mika
类似于Simi
)git clone https://gitlab.com/limira-rs/mika.git
cdexamples/counter
simi serve
(是的,是simi serve
,因为我们使用了simi-cli
)
等待构建完成,然后在您的浏览器中访问 https://127.0.0.1:8000/!
文档
尚未完成。
一些小贴士
- 从
Mutable<T>
/MutableVec<T>
的实例中获取signal
/signal_vec
,其中T: Copy
, - 从
Mutable<T>
/MutableVec<T>
的实例中获取signal_cloned
/signal_vec_cloned
,其中T: Clone
,
元素的允许内容
Mika 试图 在将子元素添加到元素时帮助您处理限制。如果您发现它不允许有效的子元素或允许无效的子元素(或其他任何错误),请随时打开一个问题。Mika 无法帮助处理其他限制,例如后代元素(子元素在子元素中)、具有/不具有属性的子元素的有效/无效性、子元素的顺序等。
在 src/dom/mod.rs
中还有一些 TODO
,欢迎贡献。
依赖项
~15MB
~280K SLoC