服务器端渲染 API
renderToString()
从
vue/server-renderer
导出类型
tsfunction renderToString( input: App | VNode, context?: SSRContext ): Promise<string>
示例
jsimport { createSSRApp } from 'vue' import { renderToString } from 'vue/server-renderer' const app = createSSRApp({ data: () => ({ msg: 'hello' }), template: `<div>{{ msg }}</div>` }) ;(async () => { const html = await renderToString(app) console.log(html) })()
SSR 上下文
您可以选择传递一个可选的上下文对象,该对象可以在渲染过程中记录额外的数据,例如 访问 Teleports 的内容
jsconst ctx = {} const html = await renderToString(app, ctx) console.log(ctx.teleports) // { '#teleported': 'teleported content' }
本页面上大多数其他SSR API也可选地接受一个上下文对象。可以通过useSSRContext辅助函数在组件代码中访问上下文对象。
另请参阅 指南 - 服务器端渲染
renderToNodeStream()
将输入渲染为Node.js 可读流。
从
vue/server-renderer
导出类型
tsfunction renderToNodeStream( input: App | VNode, context?: SSRContext ): Readable
示例
js// inside a Node.js http handler renderToNodeStream(app).pipe(res)
注意
此方法不支持在从Node.js环境解耦的
vue/server-renderer
的ESM构建中。请改用pipeToNodeWritable
。
pipeToNodeWritable()
将渲染结果通过管道发送到现有的Node.js 可写流实例。
从
vue/server-renderer
导出类型
tsfunction pipeToNodeWritable( input: App | VNode, context: SSRContext = {}, writable: Writable ): void
示例
js// inside a Node.js http handler pipeToNodeWritable(app, {}, res)
renderToWebStream()
将输入渲染为Web 可读流。
从
vue/server-renderer
导出类型
tsfunction renderToWebStream( input: App | VNode, context?: SSRContext ): ReadableStream
示例
js// inside an environment with ReadableStream support return new Response(renderToWebStream(app))
注意
在不暴露
ReadableStream
构造函数的全球作用域的环境中,应改用pipeToWebWritable
。
pipeToWebWritable()
将渲染结果通过管道发送到现有的Web 可写流实例。
从
vue/server-renderer
导出类型
tsfunction pipeToWebWritable( input: App | VNode, context: SSRContext = {}, writable: WritableStream ): void
示例
这通常与
TransformStream
一起使用。js// TransformStream is available in environments such as CloudFlare workers. // in Node.js, TransformStream needs to be explicitly imported from 'stream/web' const { readable, writable } = new TransformStream() pipeToWebWritable(app, {}, writable) return new Response(readable)
renderToSimpleStream()
使用简单的可读接口以流模式渲染输入。
从
vue/server-renderer
导出类型
tsfunction renderToSimpleStream( input: App | VNode, context: SSRContext, options: SimpleReadable ): SimpleReadable interface SimpleReadable { push(content: string | null): void destroy(err: any): void }
示例
jslet res = '' renderToSimpleStream( app, {}, { push(chunk) { if (chunk === null) { // done console(`render complete: ${res}`) } else { res += chunk } }, destroy(err) { // error encountered } } )
useSSRContext()
这是一个运行时API,用于检索传递给renderToString()
或其他服务器渲染API的上下文对象。
类型
tsfunction useSSRContext<T = Record<string, any>>(): T | undefined
示例
检索到的上下文可以用来附加渲染最终HTML所需的附加信息(例如,head元数据)。
vue<script setup> import { useSSRContext } from 'vue' // make sure to only call it during SSR // https://vite.vuejs.ac.cn/guide/ssr.html#conditional-logic if (import.meta.env.SSR) { const ctx = useSSRContext() // ...attach properties to the context } </script>
data-allow-mismatch
一个特殊属性,可以用来抑制数据同步不一致警告。
示例
html<div data-allow-mismatch="text">{{ data.toLocaleString() }}</div>
值可以限制允许的不一致类型。允许的值有
text
children
(仅允许直接子项的不一致)class
style
attribute
如果没有提供值,将允许所有类型的不一致。