8个版本 (5个重大更改)
0.6.1 | 2024年7月9日 |
---|---|
0.6.0 |
|
0.5.0 | 2024年6月11日 |
0.4.1 | 2024年5月23日 |
0.1.0 | 2024年5月8日 |
#128 在 模板引擎
每月下载量 30
11KB
118 行
fhtml
fhtml为在Rust中使用嵌入式表达式编写格式化HTML提供了便捷的宏。
组件
组件可以以多种方式编写,但创建可重用组件的常见方法包括
-
函数组件 — 函数组件可以是接受一些参数并返回计算出的HTML的简单函数。这些是跨网络框架最常见类型的组件。对于fhtml,函数组件不一定是最适合创建组件的方式,因为与大多数JSX框架不同,当在fhtml宏内部使用时,函数组件不会获得特殊处理。
-
结构体组件 — 实现了
Display
的结构体可以说是使用组件最类似JSX的方式,因为你可以以任意顺序指定字段或“属性”,并使用方便的特质如Default
。 -
宏 — 在Rust 1.71中,引入了嵌套
format_args!
的展开,但这仅适用于宏被调用的情况,而不是函数或方法,即使它们是内联的。因此,对于较小的组件,使用返回fhtml::format_args!
的宏是最有效类型的组件,因为它们通常是零成本的。
嵌套格式化
在HTML中,您经常需要做额外的格式化,您可能会想使用标准的format!
来完成。然而,这不是做额外格式化的最有效方式。相反,在大多数情况下应该使用format_args!
。由于嵌套的format_args!
调用会被编译器展开,所以它的开销通常是零成本的。
let puppy_kind = "Golden Retriever";
fhtml::format! {
<img
alt={format_args!("A happy {} playing", puppy_kind)}
src="puppy.jpg"
/>
}
// Is equivalent to writing:
std::format!("<img alt=\"A happy {} playing\" src=\"puppy.jpg\">", puppy_kind)
常量格式化
通常情况下,您可能想编写一些不使用任何运行时值或变量的HTML。为此,您可以使用fhtml::concat!
。
const MY_PAGE: &str = fhtml::concat! {
<!DOCTYPE html>
<head>
<title>"My HTML Page"</title>
</head>
<body>
<h1>"Welcome to my HTML page!"</h1>
{include_str!("../my-page.html")}
</body>
}
转义
值不会被自动转义。fhtml导出一个简单的转义函数。对于更复杂的转义,可能html-escape就足够了。
许可证
在MIT许可证下授权。依赖关系
~260–710KB
~17K SLoC