mirror of https://github.com/vuejs/core.git
fix(runtime-core): Lifecycle hooks should support callbacks shared by reference (#6687)
fix #6686
This commit is contained in:
parent
96ba71d0cf
commit
c71a08e6fd
|
@ -378,4 +378,27 @@ describe('api: lifecycle hooks', () => {
|
||||||
newValue: 3
|
newValue: 3
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('runs shared hook fn for each instance', async () => {
|
||||||
|
const fn = jest.fn()
|
||||||
|
const toggle = ref(true)
|
||||||
|
const Comp = {
|
||||||
|
setup() {
|
||||||
|
return () => (toggle.value ? [h(Child), h(Child)] : null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const Child = {
|
||||||
|
setup() {
|
||||||
|
onMounted(fn)
|
||||||
|
onBeforeUnmount(fn)
|
||||||
|
return () => h('div')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
render(h(Comp), nodeOps.createElement('div'))
|
||||||
|
expect(fn).toHaveBeenCalledTimes(2)
|
||||||
|
toggle.value = false
|
||||||
|
await nextTick()
|
||||||
|
expect(fn).toHaveBeenCalledTimes(4)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -68,7 +68,7 @@ export const createHook =
|
||||||
(hook: T, target: ComponentInternalInstance | null = currentInstance) =>
|
(hook: T, target: ComponentInternalInstance | null = currentInstance) =>
|
||||||
// post-create lifecycle registrations are noops during SSR (except for serverPrefetch)
|
// post-create lifecycle registrations are noops during SSR (except for serverPrefetch)
|
||||||
(!isInSSRComponentSetup || lifecycle === LifecycleHooks.SERVER_PREFETCH) &&
|
(!isInSSRComponentSetup || lifecycle === LifecycleHooks.SERVER_PREFETCH) &&
|
||||||
injectHook(lifecycle, hook, target)
|
injectHook(lifecycle, (...args: unknown[]) => hook(...args), target)
|
||||||
|
|
||||||
export const onBeforeMount = createHook(LifecycleHooks.BEFORE_MOUNT)
|
export const onBeforeMount = createHook(LifecycleHooks.BEFORE_MOUNT)
|
||||||
export const onMounted = createHook(LifecycleHooks.MOUNTED)
|
export const onMounted = createHook(LifecycleHooks.MOUNTED)
|
||||||
|
|
Loading…
Reference in New Issue