假设我们有一个网页,其 HTMLlang
属性根据Accept-language
请求的标头动态设置。页面的正文也是特定于语言的。我想出了什么:
require('svelte/register')
// Render the body
const Body = require('./Body.svelte').default
const body = Body.render({ language })
// Render the entire page
const Page = require('./Page.svelte').default
const page = Page.render(Object.assign(body, { language })
// Send page.html to the client
在哪里Page.svelte
:
<script>
export let html
export let language
</script>
<!DOCTYPE html>
<html lang="{ language }">
<body>
{ @html html }
</body>
</html>
一切正常。但现在我想让页面交互。我Body.svelte
在 App 中使用并设置hydrate
选项:
const app = new App({
target: document.body,
hydrate: true
})
如果不设置此选项,内容将呈现两次。使用选项集,我们在浏览器中出现错误:
Uncaught Error: options.hydrate only works if the component was compiled with the `hydratable: true` option
根据文档,我们可以将选项传递给编译器:
require('svelte/register')({ hydratable: true })
它说:
hydratable: true
为 <head> 中的每个元素添加一个标记,以便组件知道它负责在水合期间删除哪些元素
但我没有观察到任何标记。它对客户端渲染没有影响,并且错误仍然存在。
我错过了什么吗?