#dom #ui #react #web-ui #experience #gui #node-tree

dioxus-rsx

Dioxus的核心功能——一个用于交互式用户体验的无缝渲染器虚拟DOM

14个不稳定版本 (3个重大变更)

0.6.0-alpha.22024年8月7日
0.5.6 2024年7月18日
0.5.0 2024年3月28日
0.4.3 2023年12月7日
0.0.1 2022年12月9日

#87 in 过程宏

Download history 4981/week @ 2024-05-03 4868/week @ 2024-05-10 4837/week @ 2024-05-17 4533/week @ 2024-05-24 5247/week @ 2024-05-31 4202/week @ 2024-06-07 4628/week @ 2024-06-14 4995/week @ 2024-06-21 3638/week @ 2024-06-28 2541/week @ 2024-07-05 3582/week @ 2024-07-12 3872/week @ 2024-07-19 3756/week @ 2024-07-26 4087/week @ 2024-08-02 4124/week @ 2024-08-09 3714/week @ 2024-08-16

16,338 每月下载量
用于 41 个库 (9 个直接使用)

MIT/Apache

310KB
6.5K SLoC

Dioxus-RSX

Crates.io MIT licensed Build Status Discord chat

网站 | 指南 | API文档 | 聊天

概述

此库提供了Dioxus在rsx!宏中使用的实际DSL。此库与宏库分开,以启用自动格式化、翻译和AST操作(提取到组件)等工具。

贡献

设计

此库的架构已经经过几次重新设计,我们希望最终确定了一个我们满意的设计。

目前仍有考虑通过扁平化AST来提高增量解析和性能,而不需要在数据结构中添加元数据。

但是,目前我们确定的设计是

  • 包含单个TemplateBody的单个顶级CallBody
  • 每个TemplateBody都拥有自己的动态映射,在解析后填充(...而不是在解析时)
  • 对于字面量等事物,热重载信息作为最终遍历树中的节点传递

这使得我们可以增量构建树,使其模块化/更容易测试,以换取额外的“簿记遍历”。

簿记遍历的好处是

  • 它们是可选的
  • 它们通常相当快速
  • 它们可以作为构建树的一部分在不同级别强制执行

当然,主要的缺点是它们1) 更慢,2) 需要一种存储元数据的方式,它们通常将这些元数据存储在节点本身上。有时你可能甚至不想收集我们目前无法退出的元数据。

这可能会使得关于树的全球推理变得有些困难,因为你需要挖掘每个节点以获取其元数据,但局部推理要好得多。之前我们将元数据存储在一种二级“视图”类型的项目中——这没问题... 但对于长期运行的、持久化可查询树对象程序来说并不理想。

我们想要查询树

  • 以获取其动态映射
  • 以获取其热重载的内容

另一种方法可以是

  • 扁平化AST
  • 单个“解析器”IE self.parse_element / self.parse_component

我在解析器上做了一些研究,但找不到很多(任何?)实现有状态的解析器。

我们确实想要对这些项目有一个引用——目前是通过它们的路径,但也可以通过每个节点的ID来完成。不幸的是,除了Arc/Rc之外,没有简单的方法来“池化”这些。

无论如何,直到我们的应用程序受到查询性能的限制,保持树未展开似乎是可行的。JavaScript DOM有一个类似的API,在修改后刷新更改,但也有一个通过指针的ID系统。我们可以尝试使用类似generational-box或只是Arc/Rc的东西添加ID。

请注意,我们仍然不能得到类似正确树-sitter类型解析器的“好处”(增量跳过标记化),但这实际上是不可能的,除非成为LSP的一部分。从理论上讲,我们可以最终使用LSP来帮助就地修改树,然后在你想就地修改树时“修复”它。话虽如此,即使我们知道它们的形状已经改变,我们仍然需要执行两个rsx!树的比较。

许可证

该项目受MIT许可证的许可。

除非你明确说明,否则你提交给Dioxus的任何有意贡献都将按照MIT许可证进行许可,不附加任何额外的条款或条件。

依赖关系

~0.6–6.5MB
~34K SLoC