Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

元数据

到目前为止,我们渲染的所有内容都在 HTML 文档的 <body> 内。这是有道理的。毕竟,您在网页上看到的所有内容都存在于 <body> 内。

但是,有很多场合您可能想要使用与 UI 相同的响应式原语和组件模式来更新文档 <head> 内的某些内容。

这就是 leptos_meta 包的用武之地。

元数据组件

leptos_meta 提供特殊组件,让您从应用程序中任何地方的组件内部将数据注入到 <head> 中:

<Title/> 允许您从任何组件设置文档的标题。它还接受一个 formatter 函数,可用于对其他页面设置的标题应用相同的格式。例如,如果您在 <App/> 组件中放置 <Title formatter=|text| format!("{text} — My Awesome Site")/>,然后在您的路由上放置 <Title text="Page 1"/><Title text="Page 2"/>,您将得到 Page 1 — My Awesome SitePage 2 — My Awesome Site

<Link/><link> 元素注入到 <head> 中。

<Stylesheet/> 使用您提供的 href 创建 <link rel="stylesheet">

<Style/> 使用您传入的子元素(通常是字符串)创建 <style>。您可以使用它在编译时从另一个文件导入一些自定义 CSS <Style>{include_str!("my_route.css")}</Style>

<Meta/> 让您设置带有描述和其他元数据的 <meta> 标签。

Warning

注意:这些组件应该在应用程序的主体中使用,在组件的某个地方。它们不应该在 <head> 中使用(例如,如果您使用服务端渲染)。与其将 leptos_meta 组件放入 <head> 中,您可以并且应该简单地使用相应的 HTML 元素。

<Script/><script>

leptos_meta 还提供了一个 <Script/> 组件,这里值得暂停一下。我们考虑的所有其他组件都在 <head> 中注入仅限 <head> 的元素。但 <script> 也可以包含在 body 中。

有一个非常简单的方法来确定您应该使用大写 S 的 <Script/> 组件还是小写 s 的 <script> 元素:<Script/> 组件将在 <head> 中渲染,而 <script> 元素将在您将其放置在用户界面 <body> 中的任何地方渲染,与其他普通 HTML 元素一起。这些会导致 JavaScript 在不同时间加载和运行,所以使用适合您需求的那个。

<Body/><Html/>

甚至还有几个元素旨在使语义 HTML 和样式更容易。<Body/><Html/> 旨在允许您向页面上的 <html><body> 标签添加任意属性。您可以在展开运算符({..})之后使用通常的 Leptos 语法添加任意数量的属性,这些属性将直接添加到适当的元素中。

<Html
    {..}
    lang="he"
    dir="rtl"
    data-theme="dark"
/>

元数据和服务端渲染

现在,其中一些在任何场景中都很有用,但其中一些对于搜索引擎优化(SEO)特别重要。确保您有适当的 <title><meta> 标签等内容是至关重要的。现代搜索引擎爬虫确实处理客户端渲染,即作为空 index.html 发送并完全在 JS/WASM 中渲染的应用程序。但它们更喜欢接收您的应用程序已渲染为实际 HTML 的页面,在 <head> 中有元数据。

这正是 leptos_meta 的用途。实际上,在服务端渲染期间,这正是它所做的:收集您通过在整个应用程序中使用其组件声明的所有 <head> 内容,然后将其注入到实际的 <head> 中。

但我有点超前了。我们实际上还没有谈论服务端渲染。下一章将讨论与 JavaScript 库的集成。然后我们将结束客户端的讨论,转向服务端渲染。