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 中部分修复,还需要与范围进行更多未来的工作)。
- 适当的测试。目前,该软件包的作者在一个广泛的项目上手动测试了该软件包。