suspense.onRetry(() => {
processFragment(
- suspense.oldContentTree,
- suspense.contentTree as HostVNode,
+ suspense.oldSubTree,
+ suspense.subTree as HostVNode,
contentContainer,
null,
parentComponent,
suspense.onResolve(() => {
// move content from off-dom container to actual container
- ;(suspense.contentTree as any).children.forEach((vnode: HostVNode) => {
+ ;(suspense.subTree as any).children.forEach((vnode: HostVNode) => {
move(vnode, container, anchor)
})
- suspense.vnode.el = (suspense.contentTree as HostVNode).el
+ suspense.vnode.el = (suspense.subTree as HostVNode).el
// check if there is a pending parent suspense
let parent = suspense.parent
let hasUnresolvedAncestor = false
// start mounting the subtree off-dom
// TODO should buffer postQueue jobs on current boundary
- const contentTree = (suspense.contentTree = suspense.oldContentTree = childrenToFragment(
+ const subTree = (suspense.subTree = suspense.oldSubTree = childrenToFragment(
n2
))
processFragment(
null,
- contentTree as HostVNode,
+ subTree as HostVNode,
contentContainer,
null,
parentComponent,
HostElement
>
suspense.vnode = n2
- const oldContentTree = (suspense.oldContentTree = suspense.contentTree)
- const newContentTree = (suspense.contentTree = childrenToFragment(n2))
+ const oldSubTree = (suspense.oldSubTree = suspense.subTree)
+ const newContentTree = (suspense.subTree = childrenToFragment(n2))
if (!suspense.isResolved) {
suspense.retry()
} else {
// just normal patch inner content as a fragment
processFragment(
- oldContentTree,
+ oldSubTree,
newContentTree,
container,
null,
move(vnode.component.subTree, container, anchor)
return
}
+ if (__FEATURE_SUSPENSE__ && vnode.type === Suspense) {
+ move((vnode.suspense as any).subTree, container, anchor)
+ return
+ }
if (vnode.type === Fragment) {
hostInsert(vnode.el as HostNode, container, anchor)
const children = vnode.children as HostVNode[]
ref,
type,
component,
+ suspense,
children,
dynamicChildren,
shapeFlag,
return
}
+ if (__FEATURE_SUSPENSE__ && suspense != null) {
+ unmount(suspense.subTree as HostVNode, parentComponent, doRemove)
+ return
+ }
+
if (props != null && props.vnodeBeforeUnmount != null) {
invokeDirectiveHook(props.vnodeBeforeUnmount, parentComponent, vnode)
}