|
@@ -617,8 +617,8 @@ export function createRenderer<
|
|
|
|
|
|
|
|
suspense.onRetry(() => {
|
|
suspense.onRetry(() => {
|
|
|
processFragment(
|
|
processFragment(
|
|
|
- suspense.oldContentTree,
|
|
|
|
|
- suspense.contentTree as HostVNode,
|
|
|
|
|
|
|
+ suspense.oldSubTree,
|
|
|
|
|
+ suspense.subTree as HostVNode,
|
|
|
contentContainer,
|
|
contentContainer,
|
|
|
null,
|
|
null,
|
|
|
parentComponent,
|
|
parentComponent,
|
|
@@ -635,10 +635,10 @@ export function createRenderer<
|
|
|
|
|
|
|
|
suspense.onResolve(() => {
|
|
suspense.onResolve(() => {
|
|
|
// move content from off-dom container to actual container
|
|
// 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)
|
|
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
|
|
// check if there is a pending parent suspense
|
|
|
let parent = suspense.parent
|
|
let parent = suspense.parent
|
|
|
let hasUnresolvedAncestor = false
|
|
let hasUnresolvedAncestor = false
|
|
@@ -667,12 +667,12 @@ export function createRenderer<
|
|
|
|
|
|
|
|
// start mounting the subtree off-dom
|
|
// start mounting the subtree off-dom
|
|
|
// TODO should buffer postQueue jobs on current boundary
|
|
// TODO should buffer postQueue jobs on current boundary
|
|
|
- const contentTree = (suspense.contentTree = suspense.oldContentTree = childrenToFragment(
|
|
|
|
|
|
|
+ const subTree = (suspense.subTree = suspense.oldSubTree = childrenToFragment(
|
|
|
n2
|
|
n2
|
|
|
))
|
|
))
|
|
|
processFragment(
|
|
processFragment(
|
|
|
null,
|
|
null,
|
|
|
- contentTree as HostVNode,
|
|
|
|
|
|
|
+ subTree as HostVNode,
|
|
|
contentContainer,
|
|
contentContainer,
|
|
|
null,
|
|
null,
|
|
|
parentComponent,
|
|
parentComponent,
|
|
@@ -692,14 +692,14 @@ export function createRenderer<
|
|
|
HostElement
|
|
HostElement
|
|
|
>
|
|
>
|
|
|
suspense.vnode = n2
|
|
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) {
|
|
if (!suspense.isResolved) {
|
|
|
suspense.retry()
|
|
suspense.retry()
|
|
|
} else {
|
|
} else {
|
|
|
// just normal patch inner content as a fragment
|
|
// just normal patch inner content as a fragment
|
|
|
processFragment(
|
|
processFragment(
|
|
|
- oldContentTree,
|
|
|
|
|
|
|
+ oldSubTree,
|
|
|
newContentTree,
|
|
newContentTree,
|
|
|
container,
|
|
container,
|
|
|
null,
|
|
null,
|
|
@@ -1259,6 +1259,10 @@ export function createRenderer<
|
|
|
move(vnode.component.subTree, container, anchor)
|
|
move(vnode.component.subTree, container, anchor)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
+ if (__FEATURE_SUSPENSE__ && vnode.type === Suspense) {
|
|
|
|
|
+ move((vnode.suspense as any).subTree, container, anchor)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
if (vnode.type === Fragment) {
|
|
if (vnode.type === Fragment) {
|
|
|
hostInsert(vnode.el as HostNode, container, anchor)
|
|
hostInsert(vnode.el as HostNode, container, anchor)
|
|
|
const children = vnode.children as HostVNode[]
|
|
const children = vnode.children as HostVNode[]
|
|
@@ -1281,6 +1285,7 @@ export function createRenderer<
|
|
|
ref,
|
|
ref,
|
|
|
type,
|
|
type,
|
|
|
component,
|
|
component,
|
|
|
|
|
+ suspense,
|
|
|
children,
|
|
children,
|
|
|
dynamicChildren,
|
|
dynamicChildren,
|
|
|
shapeFlag,
|
|
shapeFlag,
|
|
@@ -1297,6 +1302,11 @@ export function createRenderer<
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ if (__FEATURE_SUSPENSE__ && suspense != null) {
|
|
|
|
|
+ unmount(suspense.subTree as HostVNode, parentComponent, doRemove)
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
if (props != null && props.vnodeBeforeUnmount != null) {
|
|
if (props != null && props.vnodeBeforeUnmount != null) {
|
|
|
invokeDirectiveHook(props.vnodeBeforeUnmount, parentComponent, vnode)
|
|
invokeDirectiveHook(props.vnodeBeforeUnmount, parentComponent, vnode)
|
|
|
}
|
|
}
|