8个版本 (5个重大更改)

0.6.1 2024年7月9日
0.6.0 2024年7月5日
0.5.0 2024年6月11日
0.4.1 2024年5月23日
0.1.0 2024年5月8日

#128模板引擎

每月下载量 30

MIT 许可证

11KB
118

fhtml

github crates.io docs.rs build status

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