fix: do not set currentInstance in beforeCreate

fix #12636
This commit is contained in:
Evan You 2022-07-12 18:19:19 +08:00
parent 04b4703de7
commit 0825d3087f
2 changed files with 9 additions and 4 deletions

View File

@ -58,7 +58,7 @@ export function initMixin(Vue: typeof Component) {
initLifecycle(vm)
initEvents(vm)
initRender(vm)
callHook(vm, 'beforeCreate')
callHook(vm, 'beforeCreate', undefined, false /* setContext */)
initInjections(vm) // resolve injections before data/props
initState(vm)
initProvide(vm) // resolve provide after data/props

View File

@ -375,11 +375,16 @@ export function deactivateChildComponent(vm: Component, direct?: boolean) {
}
}
export function callHook(vm: Component, hook: string, args?: any[]) {
export function callHook(
vm: Component,
hook: string,
args?: any[],
setContext = true
) {
// #7573 disable dep collection when invoking lifecycle hooks
pushTarget()
const prev = currentInstance
setCurrentInstance(vm)
setContext && setCurrentInstance(vm)
const handlers = vm.$options[hook]
const info = `${hook} hook`
if (handlers) {
@ -390,6 +395,6 @@ export function callHook(vm: Component, hook: string, args?: any[]) {
if (vm._hasHookEvent) {
vm.$emit('hook:' + hook)
}
setCurrentInstance(prev)
setContext && setCurrentInstance(prev)
popTarget()
}