import {
PublicAPIComponent,
Component,
- currentSuspense,
currentInstance,
ComponentInternalInstance,
isInSSRComponentSetup
// suspense-controlled or SSR.
if (
- (__FEATURE_SUSPENSE__ && suspensible && currentSuspense) ||
+ (__FEATURE_SUSPENSE__ && suspensible && instance.suspense) ||
(__NODE_JS__ && isInSSRComponentSetup)
) {
return load()
import {
currentInstance,
ComponentInternalInstance,
- currentSuspense,
Data,
isInSSRComponentSetup,
recordInstanceBoundEffect
}
const instance = currentInstance
- const suspense = currentSuspense
let getter: () => any
if (isArray(source)) {
}
}
} else {
- scheduler = job => {
- queuePostRenderEffect(job, suspense)
- }
+ scheduler = job => queuePostRenderEffect(job, instance && instance.suspense)
}
const runner = effect(getter, {
emit: Emit
// suspense related
+ suspense: SuspenseBoundary | null
asyncDep: Promise<any> | null
asyncResolved: boolean
export function createComponentInstance(
vnode: VNode,
- parent: ComponentInternalInstance | null
+ parent: ComponentInternalInstance | null,
+ suspense: SuspenseBoundary | null
) {
// inherit parent app context - or - if root, adopt from root vnode
const appContext =
components: Object.create(appContext.components),
directives: Object.create(appContext.directives),
- // async dependency management
+ // suspense related
+ suspense,
asyncDep: null,
asyncResolved: false,
}
export let currentInstance: ComponentInternalInstance | null = null
-export let currentSuspense: SuspenseBoundary | null = null
export const getCurrentInstance: () => ComponentInternalInstance | null = () =>
currentInstance || currentRenderingInstance
setup.length > 1 ? createSetupContext(instance) : null)
currentInstance = instance
- currentSuspense = parentSuspense
pauseTracking()
const setupResult = callWithErrorHandling(
setup,
)
resetTracking()
currentInstance = null
- currentSuspense = null
if (isPromise(setupResult)) {
if (isSSR) {
// support for 2.x options
if (__FEATURE_OPTIONS__) {
currentInstance = instance
- currentSuspense = parentSuspense
applyOptions(instance, Component)
currentInstance = null
- currentSuspense = null
}
}
vnode: VNode,
parentComponent: ComponentInternalInstance | null = null
): ResolvedSSRBuffer | Promise<ResolvedSSRBuffer> {
- const instance = createComponentInstance(vnode, parentComponent)
+ const instance = createComponentInstance(vnode, parentComponent, null)
const res = setupComponent(
instance,
null /* parentSuspense (no need to track for SSR) */,