客户端用法

This package is part of the Lit Labs family of experimental packages. See the Lit Labs page for guidance on using Labs software in production.

Lit SSR 生成静态 HTML 供浏览器解析和绘制,无需任何 JavaScript。(不支持声明式 Shadow DOM 的浏览器将需要一些 JavaScript polyfill 来支持使用 Shadow DOM 的 Lit 组件。)对于静态内容的页面,这就是所需的全部内容。但是,如果页面内容需要是动态的并响应用户交互,则需要 JavaScript 来重新应用该响应性。

如何在客户端重新应用响应性取决于你是渲染独立的 Lit 模板还是使用 Lit 组件。

Lit 模板的"水合"是让 Lit 重新将 Lit 模板的表达式与它们应该在 DOM 中更新的节点关联起来的过程,并添加事件监听器。为了水合 Lit 模板,@lit-labs/ssr-client 包中提供了 hydrate() 方法。在使用 render() 更新服务器渲染的容器之前,你必须首先使用与服务器上用于渲染的相同模板和数据在该容器上调用 hydrate()

要重新应用 Lit 组件的响应性,需要加载自定义元素定义以使它们升级,启用它们的生命周期回调,并且需要水合组件 shadow root 中的模板。

升级可以通过简单地加载注册自定义元素的组件模块来实现。这可以通过加载页面的所有组件定义的包来完成,或者可以基于更复杂的启发式方法,其中仅根据需要加载定义的子集。为确保 LitElement shadow root 中的模板被水合,加载 @lit-labs/ssr-client/lit-element-hydrate-support.js 模块,该模块为 LitElement 安装支持,当它检测到自己使用声明式 shadow DOM 进行了服务器渲染时会自动水合。此模块必须在加载 lit 模块(包括导入 lit 的任何组件模块)之前加载,以确保正确安装水合支持。

当 Lit 组件在服务器上渲染时,它们的 shadow root 内容会在 <template shadowroot> 内发出,也称为声明式 Shadow Root。声明式 shadow root 在解析 HTML 时会自动将其内容附加到模板的父元素的 shadow root 上,无需 JavaScript。

在所有浏览器都包含声明式 shadow DOM 支持之前,可以内联到页面中的一个非常小的 polyfill 是可用的。这让你现在就可以将 SSR 用于任何启用了 JavaScript 的浏览器,并在该功能推出到其他浏览器时逐步解决不支持 JavaScript 的用例。template-shadowroot polyfill 的用法如下所述。

加载 @lit-labs/ssr-client/lit-element-hydrate-support.js

Permalink to "加载 @lit-labs/ssr-client/lit-element-hydrate-support.js"

这需要在任何组件模块和 lit 库之前加载。

例如:

如果你正在打包你的代码,确保 @lit-labs/ssr-client/lit-element-hydrate-support.js 首先被导入:

使用 template-shadowroot polyfill

Permalink to "使用 template-shadowroot polyfill"

下面的 HTML 片段包括一个可选策略,在 polyfill 加载前隐藏 body 以防止布局偏移。

此示例显示了一个策略,结合了 @lit-labs/ssr-client/lit-element-hydrate-support.jstemplate-shadowroot polyfill 加载,并提供了一个带有 SSR 组件的页面,以在客户端水合。

Koa 服务器中的 Lit SSR