Lit SSR 客户端使用
Lit SSR 为浏览器生成静态 HTML,以便浏览器解析和绘制,无需任何 JavaScript。(不支持声明式 Shadow DOM 的浏览器将需要一些 JavaScript polyfill 才能使用 Lit 组件,这些组件被编写为利用 Shadow DOM。)对于包含静态内容的页面,这已经足够了。但是,如果页面内容需要是动态的并响应用户交互,则需要 JavaScript 来重新应用该响应性。
如何从客户端重新应用该响应性取决于您是渲染独立的 Lit 模板还是使用 Lit 组件。
独立 Lit 模板
指向“独立 Lit 模板”的永久链接Lit 模板的“水合”是指让 Lit 重新将 Lit 模板的表达式与其在 DOM 中应更新的节点关联起来,以及添加事件侦听器。为了使 Lit 模板水合,@lit-labs/ssr-client
包提供了 hydrate()
方法。在使用 render()
更新服务器渲染的容器之前,必须先使用与服务器渲染时相同的模板和数据在该容器上调用 hydrate()
。
Lit 组件
指向“Lit 组件”的永久链接为了重新应用 Lit 组件的响应性,需要加载自定义元素定义以供其升级,从而启用其生命周期回调,并且需要对组件 Shadow DOM 中的模板进行水合。
升级可以通过简单地加载注册自定义元素的组件模块来实现。这可以通过加载一个包含页面所有组件定义的包来实现,或者可以根据更复杂的启发式算法来实现,其中只有必要时才加载定义的子集。为了确保 LitElement
Shadow DOM 中的模板得到水合,请加载 @lit-labs/ssr-client/lit-element-hydrate-support.js
模块,该模块为 LitElement
安装支持,以便在检测到它是用声明式 Shadow DOM 服务器渲染时自动水合自身。此模块必须在加载 lit
模块之前加载(包括导入 lit
的任何组件模块),以确保正确安装水合支持。
当 Lit 组件在服务器端渲染时,它们的 Shadow DOM 内容在 <template shadowroot>
内发出,也称为 声明式 Shadow Root。声明式 Shadow DOM 会在解析 HTML 时自动将内容附加到模板父元素上的 Shadow DOM,无需 JavaScript。
在所有浏览器都包含声明式 Shadow DOM 支持之前,可以使用一个非常小的 polyfill,可以内联到您的页面中。这样,您现在就可以为任何启用了 JavaScript 的浏览器使用 SSR,并随着该功能逐步推广到其他浏览器,逐步解决非 JavaScript 用例。下面介绍了如何使用 template-shadowroot
polyfill。
加载 @lit-labs/ssr-client/lit-element-hydrate-support.js
指向“加载 @lit-labs/ssr-client/lit-element-hydrate-support.js”的永久链接 这需要在加载任何组件模块和 lit
库之前加载。
例如
如果您正在 捆绑 您的代码,请确保 @lit-labs/ssr-client/lit-element-hydrate-support.js
首先导入
使用 template-shadowroot
polyfill
指向“使用 template-shadowroot polyfill”的永久链接 下面的 HTML 代码片段包含一个可选策略,用于在加载 polyfill 之前隐藏主体,以防止布局偏移。
组合示例
指向“组合示例”的永久链接此示例展示了一种结合了 @lit-labs/ssr-client/lit-element-hydrate-support.js
和 template-shadowroot
polyfill 加载的策略,并提供了一个包含 SSRed 组件以在客户端进行水合的页面。