feat(server-renderer): render suspense in vnode mode (#727)
This commit is contained in:
committed by
GitHub
parent
e12ddd96ba
commit
589aeb402c
@@ -36,7 +36,8 @@ const {
|
||||
setCurrentRenderingInstance,
|
||||
setupComponent,
|
||||
renderComponentRoot,
|
||||
normalizeVNode
|
||||
normalizeVNode,
|
||||
normalizeSuspenseChildren
|
||||
} = ssrUtils
|
||||
|
||||
// Each component has a buffer array.
|
||||
@@ -248,7 +249,7 @@ function renderVNode(
|
||||
} else if (shapeFlag & ShapeFlags.PORTAL) {
|
||||
renderPortal(vnode, parentComponent)
|
||||
} else if (shapeFlag & ShapeFlags.SUSPENSE) {
|
||||
// TODO
|
||||
push(renderSuspense(vnode, parentComponent))
|
||||
} else {
|
||||
console.warn(
|
||||
'[@vue/server-renderer] Invalid VNode type:',
|
||||
@@ -365,3 +366,19 @@ async function resolvePortals(context: SSRContext) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function renderSuspense(
|
||||
vnode: VNode,
|
||||
parentComponent: ComponentInternalInstance
|
||||
): Promise<ResolvedSSRBuffer> {
|
||||
const { content, fallback } = normalizeSuspenseChildren(vnode)
|
||||
try {
|
||||
const { push, getBuffer } = createBuffer()
|
||||
renderVNode(push, content, parentComponent)
|
||||
return await getBuffer()
|
||||
} catch {
|
||||
const { push, getBuffer } = createBuffer()
|
||||
renderVNode(push, fallback, parentComponent)
|
||||
return getBuffer()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user