#virtual-dom #vdom #tree #no-std

no-std 木质素

一个主要用于Web使用的虚拟DOM结构

9次发布

0.1.0 2021年6月1日
0.0.8 2021年6月1日
0.0.7 2021年4月25日
0.0.5 2021年1月30日
0.0.1 2020年10月2日

#1413数据结构

29 每月下载量
4 crates 中使用

MIT/Apache

140KB
2K SLoC

木质素

Lib.rs Crates.io Docs.rs

Rust 1.46 CI Crates.io - License

GitHub open issues open pull requests crev reviews

一个轻量但功能丰富的虚拟DOM库,主要用于Web使用。

no_std 和没有启用 "callbacks" 功能的依赖项。

安装

请使用 cargo-edit 以始终添加此库的最新版本

cargo add lignin && cargo add -D lignin --features callbacks

某些类型约束在启用 "callbacks" 功能时更为严格,因此请务必始终检查此方式!

在编写支持回调的渲染器时,请使用

cargo add lignin --features callbacks

以始终启用该功能。

功能

"callbacks"

启用DOM回调支持。默认禁用。需要 std

应用程序或组件可以针对回调API进行编写,而无需启用此功能,在这种情况下,这些代码路径可以在编译时删除。

示例

use lignin::{Node, Element, ElementCreationOptions};

// Please bring your own allocator where necessary.
let _ = &Node::HtmlElement {
  element: &Element {
    name: "DIV", // Use all-caps for more efficient DOM interactions.¹
    creation_options: ElementCreationOptions::new(), // `const fn` builder and getter/setter patterns for extensible interfaces.
    attributes: &[],
    content: Node::Multi(&[
      "Hello! ".into(), // Some convenience included.
      Node::Comment {
        comment: "--> Be mindful of HTML pitfalls. <!--", // Renderers must validate.
        dom_binding: None,
      }
    ]),
    event_bindings: &[], // Strongly typed using `web-sys`.
  },
  dom_binding: None, // For JS interop.
}
.prefer_thread_safe(); // Thread-safety can be inferred from bindings!

¹ 参见 Element.tagName (MDN)。这避免了不区分大小写的比较。

实现合同

有一些生态系统兼容性规则没有由Rust的类型系统或 unsafe 关键字涵盖。请参阅 主模块文档 了解更多信息。

已有技术

  • Dodrio,它没有完全满足我的要求,但总的来说启发了这种方法。

感谢

感谢 Dronaroid 为这个库找到了一个很好的名字,@platy 对批评,并推动我向更好的实现迈进,以及所有在Rust编程语言社区服务器discord中回答我在重写期间提出的问题的人。

许可

在以下两种许可中选择一种

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在本作品中的任何贡献,应双授权如上所述,不附加任何额外条款或条件。

行为准则

变更日志

版本控制

lignin严格遵循语义版本2.0.0,有以下例外

  • 次要版本在主版本更改时不会重置为0(除v1外)。
    将其视为全局功能级别。
  • 修订版本在主版本或次要版本更改时不会重置为0(除v0.1和v1外)。
    将其视为全局修订级别。

这包括上面指定的Rust版本要求。
较早的Rust版本可能兼容,但这可能会随着次要或修订版本而变化。

受功能和修补程序影响的是版本可以通过CHANGELOG.md中的相应标题确定。

依赖项

~0–2MB
~40K SLoC