diff --git a/packages/runtime-core/src/componentRenderUtils.ts b/packages/runtime-core/src/componentRenderUtils.ts index 9fe381ff645..5badb04b006 100644 --- a/packages/runtime-core/src/componentRenderUtils.ts +++ b/packages/runtime-core/src/componentRenderUtils.ts @@ -60,7 +60,6 @@ export function renderComponentRoot( setupState, ctx, inheritAttrs, - isMounted, } = instance const prev = setCurrentRenderingInstance(instance) @@ -254,9 +253,7 @@ export function renderComponentRoot( `that cannot be animated.`, ) } - root.transition = isMounted - ? vnode.component!.subTree.transition! - : vnode.transition + root.transition = vnode.transition } if (__DEV__ && setRoot) { diff --git a/packages/runtime-core/src/components/BaseTransition.ts b/packages/runtime-core/src/components/BaseTransition.ts index 568a6382bfe..37534ad699f 100644 --- a/packages/runtime-core/src/components/BaseTransition.ts +++ b/packages/runtime-core/src/components/BaseTransition.ts @@ -227,7 +227,6 @@ const BaseTransitionImpl: ComponentOptions = { if (!(instance.job.flags! & SchedulerJobFlags.DISPOSED)) { instance.update() } - delete leavingHooks.afterLeave } return emptyPlaceholder(child) } else if (mode === 'in-out' && innerChild.type !== Comment) { diff --git a/packages/runtime-core/src/components/KeepAlive.ts b/packages/runtime-core/src/components/KeepAlive.ts index dd1d1f5a6e3..a87f44cc8fa 100644 --- a/packages/runtime-core/src/components/KeepAlive.ts +++ b/packages/runtime-core/src/components/KeepAlive.ts @@ -267,7 +267,7 @@ const KeepAliveImpl: ComponentOptions = { pendingCacheKey = null if (!slots.default) { - return (current = null) + return null } const children = slots.default() diff --git a/packages/vue/__tests__/e2e/Transition.spec.ts b/packages/vue/__tests__/e2e/Transition.spec.ts index c0863a75991..9a5375e72a2 100644 --- a/packages/vue/__tests__/e2e/Transition.spec.ts +++ b/packages/vue/__tests__/e2e/Transition.spec.ts @@ -1427,11 +1427,9 @@ describe('e2e: Transition', () => { }, E2E_TIMEOUT, ) - }) - describe('transition with KeepAlive', () => { test( - 'unmount innerChild (out-in mode)', + 'w/ KeepAlive + unmount innerChild', async () => { const unmountSpy = vi.fn() await page().exposeFunction('unmountSpy', unmountSpy) @@ -1486,173 +1484,6 @@ describe('e2e: Transition', () => { }, E2E_TIMEOUT, ) - - // #11775 - test( - 'switch child then update include (out-in mode)', - async () => { - const onUpdatedSpyA = vi.fn() - const onUnmountedSpyC = vi.fn() - - await page().exposeFunction('onUpdatedSpyA', onUpdatedSpyA) - await page().exposeFunction('onUnmountedSpyC', onUnmountedSpyC) - - await page().evaluate(() => { - const { onUpdatedSpyA, onUnmountedSpyC } = window as any - const { createApp, ref, shallowRef, h, onUpdated, onUnmounted } = ( - window as any - ).Vue - createApp({ - template: ` -
- - - - - -
- - - - `, - components: { - CompA: { - name: 'CompA', - setup() { - onUpdated(onUpdatedSpyA) - return () => h('div', 'CompA') - }, - }, - CompB: { - name: 'CompB', - setup() { - return () => h('div', 'CompB') - }, - }, - CompC: { - name: 'CompC', - setup() { - onUnmounted(onUnmountedSpyC) - return () => h('div', 'CompC') - }, - }, - }, - setup: () => { - const includeRef = ref(['CompA', 'CompB', 'CompC']) - const current = shallowRef('CompA') - const switchToB = () => (current.value = 'CompB') - const switchToC = () => (current.value = 'CompC') - const switchToA = () => { - current.value = 'CompA' - includeRef.value = ['CompA'] - } - return { current, switchToB, switchToC, switchToA, includeRef } - }, - }).mount('#app') - }) - - await transitionFinish() - expect(await html('#container')).toBe('
CompA
') - - await click('#switchToB') - await nextTick() - await click('#switchToC') - await transitionFinish() - expect(await html('#container')).toBe('
CompC
') - - await click('#switchToA') - await transitionFinish() - expect(await html('#container')).toBe('
CompA
') - - // expect CompA only update once - expect(onUpdatedSpyA).toBeCalledTimes(1) - expect(onUnmountedSpyC).toBeCalledTimes(1) - }, - E2E_TIMEOUT, - ) - - // #10827 - test( - 'switch and update child then update include (out-in mode)', - async () => { - const onUnmountedSpyB = vi.fn() - await page().exposeFunction('onUnmountedSpyB', onUnmountedSpyB) - - await page().evaluate(() => { - const { onUnmountedSpyB } = window as any - const { - createApp, - ref, - shallowRef, - h, - provide, - inject, - onUnmounted, - } = (window as any).Vue - createApp({ - template: ` -
- - - - - -
- - - `, - components: { - CompA: { - name: 'CompA', - setup() { - const current = inject('current') - return () => h('div', current.value) - }, - }, - CompB: { - name: 'CompB', - setup() { - const current = inject('current') - onUnmounted(onUnmountedSpyB) - return () => h('div', current.value) - }, - }, - }, - setup: () => { - const includeRef = ref(['CompA']) - const current = shallowRef('CompA') - provide('current', current) - - const switchToB = () => { - current.value = 'CompB' - includeRef.value = ['CompA', 'CompB'] - } - const switchToA = () => { - current.value = 'CompA' - includeRef.value = ['CompA'] - } - return { current, switchToB, switchToA, includeRef } - }, - }).mount('#app') - }) - - await transitionFinish() - expect(await html('#container')).toBe('
CompA
') - - await click('#switchToB') - await transitionFinish() - await transitionFinish() - expect(await html('#container')).toBe('
CompB
') - - await click('#switchToA') - await transitionFinish() - await transitionFinish() - expect(await html('#container')).toBe('
CompA
') - - expect(onUnmountedSpyB).toBeCalledTimes(1) - }, - E2E_TIMEOUT, - ) }) describe('transition with Suspense', () => {