]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix: Revert "fix(Transition): handle KeepAlive child unmount in Transition out-in...
authorEvan You <evan@vuejs.org>
Fri, 6 Sep 2024 00:50:39 +0000 (08:50 +0800)
committerEvan You <evan@vuejs.org>
Fri, 6 Sep 2024 00:50:39 +0000 (08:50 +0800)
This reverts commit 311655352931863dfcf520b8cf29cebc5b7e1e00.

close #11829
reopen #11775

packages/runtime-core/src/componentRenderUtils.ts
packages/runtime-core/src/components/BaseTransition.ts
packages/runtime-core/src/components/KeepAlive.ts
packages/vue/__tests__/e2e/Transition.spec.ts

index 9fe381ff6458f58cc6552eec394a2d28d2bacb60..5badb04b006a815c31801d6c7060a29cf837b49b 100644 (file)
@@ -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) {
index 568a6382bfec33d90c2c2e48c4a23e16dc052e25..37534ad699fc654c94571fb3aea8524522dd3e43 100644 (file)
@@ -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) {
index dd1d1f5a6e3addf044c2c25e9582a348827af35e..a87f44cc8fade0c0b4250b3f43a303a14df26343 100644 (file)
@@ -267,7 +267,7 @@ const KeepAliveImpl: ComponentOptions = {
       pendingCacheKey = null
 
       if (!slots.default) {
-        return (current = null)
+        return null
       }
 
       const children = slots.default()
index c0863a75991be303db3781088c49a0a708dfd019..9a5375e72a255993c9f84c9c853f938b9c483565 100644 (file)
@@ -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: `
-            <div id="container">
-              <transition mode="out-in">
-                <KeepAlive :include="includeRef">
-                  <component :is="current" />
-                </KeepAlive>
-              </transition>
-            </div>
-            <button id="switchToB" @click="switchToB">switchToB</button>
-            <button id="switchToC" @click="switchToC">switchToC</button>
-            <button id="switchToA" @click="switchToA">switchToA</button>
-          `,
-            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('<div>CompA</div>')
-
-        await click('#switchToB')
-        await nextTick()
-        await click('#switchToC')
-        await transitionFinish()
-        expect(await html('#container')).toBe('<div class="">CompC</div>')
-
-        await click('#switchToA')
-        await transitionFinish()
-        expect(await html('#container')).toBe('<div class="">CompA</div>')
-
-        // 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: `
-            <div id="container">
-              <transition name="test-anim" mode="out-in">
-                <KeepAlive :include="includeRef">
-                  <component :is="current" />
-                </KeepAlive>
-              </transition>
-            </div>
-            <button id="switchToA" @click="switchToA">switchToA</button>
-            <button id="switchToB" @click="switchToB">switchToB</button>
-          `,
-            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('<div>CompA</div>')
-
-        await click('#switchToB')
-        await transitionFinish()
-        await transitionFinish()
-        expect(await html('#container')).toBe('<div class="">CompB</div>')
-
-        await click('#switchToA')
-        await transitionFinish()
-        await transitionFinish()
-        expect(await html('#container')).toBe('<div class="">CompA</div>')
-
-        expect(onUnmountedSpyB).toBeCalledTimes(1)
-      },
-      E2E_TIMEOUT,
-    )
   })
 
   describe('transition with Suspense', () => {