refactor(runtime-core): remove the need for currentSuspense

This commit is contained in:
Evan You 2020-03-30 11:49:51 -04:00
parent 54a11c7bec
commit 573bcb2e11
5 changed files with 10 additions and 16 deletions

View File

@ -1,7 +1,6 @@
import {
PublicAPIComponent,
Component,
currentSuspense,
currentInstance,
ComponentInternalInstance,
isInSSRComponentSetup
@ -118,7 +117,7 @@ export function defineAsyncComponent<
// suspense-controlled or SSR.
if (
(__FEATURE_SUSPENSE__ && suspensible && currentSuspense) ||
(__FEATURE_SUSPENSE__ && suspensible && instance.suspense) ||
(__NODE_JS__ && isInSSRComponentSetup)
) {
return load()

View File

@ -20,7 +20,6 @@ import {
import {
currentInstance,
ComponentInternalInstance,
currentSuspense,
Data,
isInSSRComponentSetup,
recordInstanceBoundEffect
@ -139,7 +138,6 @@ function doWatch(
}
const instance = currentInstance
const suspense = currentSuspense
let getter: () => any
if (isArray(source)) {
@ -238,9 +236,7 @@ function doWatch(
}
}
} else {
scheduler = job => {
queuePostRenderEffect(job, suspense)
}
scheduler = job => queuePostRenderEffect(job, instance && instance.suspense)
}
const runner = effect(getter, {

View File

@ -145,6 +145,7 @@ export interface ComponentInternalInstance {
emit: Emit
// suspense related
suspense: SuspenseBoundary | null
asyncDep: Promise<any> | null
asyncResolved: boolean
@ -177,7 +178,8 @@ const emptyAppContext = createAppContext()
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 =
@ -213,7 +215,8 @@ export function createComponentInstance(
components: Object.create(appContext.components),
directives: Object.create(appContext.directives),
// async dependency management
// suspense related
suspense,
asyncDep: null,
asyncResolved: false,
@ -266,7 +269,6 @@ export function createComponentInstance(
}
export let currentInstance: ComponentInternalInstance | null = null
export let currentSuspense: SuspenseBoundary | null = null
export const getCurrentInstance: () => ComponentInternalInstance | null = () =>
currentInstance || currentRenderingInstance
@ -351,7 +353,6 @@ function setupStatefulComponent(
setup.length > 1 ? createSetupContext(instance) : null)
currentInstance = instance
currentSuspense = parentSuspense
pauseTracking()
const setupResult = callWithErrorHandling(
setup,
@ -361,7 +362,6 @@ function setupStatefulComponent(
)
resetTracking()
currentInstance = null
currentSuspense = null
if (isPromise(setupResult)) {
if (isSSR) {
@ -478,10 +478,8 @@ function finishComponentSetup(
// support for 2.x options
if (__FEATURE_OPTIONS__) {
currentInstance = instance
currentSuspense = parentSuspense
applyOptions(instance, Component)
currentInstance = null
currentSuspense = null
}
}

View File

@ -1028,7 +1028,8 @@ function baseCreateRenderer(
) => {
const instance: ComponentInternalInstance = (initialVNode.component = createComponentInstance(
initialVNode,
parentComponent
parentComponent,
parentSuspense
))
if (__HMR__ && instance.type.__hmrId) {

View File

@ -144,7 +144,7 @@ function renderComponentVNode(
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) */,