4个版本 (破坏性)
| 0.4.0 | 2023年10月28日 |
|---|---|
| 0.3.0 | 2023年7月17日 |
| 0.2.0 | 2023年7月17日 |
| 0.1.0 | 2023年7月14日 |
#330 in 过程宏
78KB
2K SLoC
yew-alt-html
在Yew中构建Html的备用宏。
示例
此示例表示Yew应用程序的根App组件。它展示了文本节点中的插值、属性中的插值、宏根中的多个节点,以及缩写标签的关闭和使用匹配表达式中的标签。
use yew::prelude::*;
use yew_alt_html::ah;
enum LoadState {
Loading,
Failed,
Loaded,
}
#[function_component]
pub fn App() -> Html {
let name = "Yew";
let italic_style = "font-style: italic";
use LoadState::*;
let state = Loaded;
let items = vec![1, 2, 3];
ah! {
<h1 style=italic_style>"Hello " name "!"</>
match state {
Loading => "Loading...",
Failed => "Load failed!",
Loaded => <p>"Welcome to "<code>"yew-alt-html"</>"!"</>,
}
<ul>
for item in items {
<li>item</>
}
</>
}
}
为什么还需要另一个html!?
这个crate在创建一个更容易使用的宏上进行实验。为此,替换了使用起来略显繁琐的html!语法,直接在ah!中使用值。
以下问题应该通过此crate解决
- 即使值是简单的文字,也需要在标签内使用
{}。 - 需要在
{}中包装属性(请注意,缩写仍然使用{变量})。 - 在关闭标签时必须重复泛型(Yew专用)和标签名称(虽然不是非常HTML,但仍然值得考虑)。
- 在宏根中使用多个节点时,必须使用片段
<></>。 - 不能像使用
if一样使用match。 - 繁琐的
{ for ... }表示法(在0.4.0中修复)。
可能的问题
大多数 html! 语法 应该由 ah! 宏支持。如果您的代码只是将 html! 替换为 ah! 而不能正常工作,请 提交一个问题。
一些语法受到限制(例如,在属性中使用 > 而没有 if)。建议的解决方案是将复杂值在 ah! 之前移动到变量中,或者像在 html! 中那样将值包裹在 {} 大括号中。
计划中
- 支持在
match情况中直接编写标签(目前需要将标签包裹在ah!中),类似于if(在 0.2.0 中修复)。 - 底层不使用
html!:添加更多检查(目前由html!处理)并手动生成虚拟 DOM。 - 只要可用,就使用 诊断 API 来修改范围并显示确切的错误范围,而不是使所有内容都变红(在 0.3.0 中部分修复,还需要与范围进行更多未来的工作)。
- 适当的测试。目前,该软件包的作者在一个广泛的项目上手动测试了该软件包。