fix(script-setup): ensure useContext() return valid context

This commit is contained in:
Evan You 2020-11-26 09:25:35 -05:00
parent a764814b8e
commit 73cdb9d420
2 changed files with 13 additions and 3 deletions

View File

@ -1,4 +1,8 @@
import { getCurrentInstance, SetupContext } from './component'
import {
getCurrentInstance,
SetupContext,
createSetupContext
} from './component'
import { EmitFn, EmitsOptions } from './componentEmits'
import { ComponentObjectPropsOptions, ExtractPropTypes } from './componentProps'
import { warn } from './warning'
@ -53,5 +57,9 @@ export function defineEmit(emitOptions?: any) {
}
export function useContext(): SetupContext {
return getCurrentInstance()!.setupContext!
const i = getCurrentInstance()!
if (__DEV__ && !i) {
warn(`useContext() called without active instance.`)
}
return i.setupContext || (i.setupContext = createSetupContext(i))
}

View File

@ -746,7 +746,9 @@ const attrHandlers: ProxyHandler<Data> = {
}
}
function createSetupContext(instance: ComponentInternalInstance): SetupContext {
export function createSetupContext(
instance: ComponentInternalInstance
): SetupContext {
const expose: SetupContext['expose'] = exposed => {
if (__DEV__ && instance.exposed) {
warn(`expose() should be called only once per setup().`)