cc163ea458
* pre-calculate the buttonId/panelId on the server * add simple-tabs example * update changelog * make Disclosure IDs stable between server/client
33 lines
848 B
TypeScript
33 lines
848 B
TypeScript
import { createApp, createSSRApp, nextTick } from 'vue'
|
|
import { renderToString } from 'vue/server-renderer'
|
|
import { env } from '../utils/env'
|
|
|
|
export async function renderSSR(component: any, rootProps: any = {}) {
|
|
let container = document.createElement('div')
|
|
document.body.appendChild(container)
|
|
|
|
// Render on the server
|
|
env.set('server')
|
|
let app = createSSRApp(component, rootProps)
|
|
let contents = await renderToString(app)
|
|
container.innerHTML = contents
|
|
|
|
return {
|
|
contents,
|
|
async hydrate() {
|
|
let app = createApp(component, rootProps)
|
|
app.mount(container)
|
|
|
|
await nextTick()
|
|
|
|
return {
|
|
contents: container.innerHTML,
|
|
}
|
|
},
|
|
}
|
|
}
|
|
|
|
export async function renderHydrate(component: any, rootProps: any = {}) {
|
|
return renderSSR(component, rootProps).then(({ hydrate }) => hydrate())
|
|
}
|