diff --git a/packages/runtime-core/src/components/Suspense.ts b/packages/runtime-core/src/components/Suspense.ts index ddf21dd2ed4..5e5521b09be 100644 --- a/packages/runtime-core/src/components/Suspense.ts +++ b/packages/runtime-core/src/components/Suspense.ts @@ -504,7 +504,12 @@ function createSuspenseBoundary( if (delayEnter) { activeBranch!.transition!.afterLeave = () => { if (pendingId === suspense.pendingId) { - move(pendingBranch!, container, anchor, MoveType.ENTER) + move( + pendingBranch!, + container, + next(activeBranch!), + MoveType.ENTER + ) queuePostFlushCb(effects) } } @@ -577,7 +582,6 @@ function createSuspenseBoundary( // invoke @fallback event triggerEvent(vnode, 'onFallback') - const anchor = next(activeBranch!) const mountFallback = () => { if (!suspense.isInFallback) { return @@ -587,7 +591,7 @@ function createSuspenseBoundary( null, fallbackVNode, container, - anchor, + next(activeBranch!), parentComponent, null, // fallback tree will not have suspense context isSVG, diff --git a/packages/vue/__tests__/e2e/Transition.spec.ts b/packages/vue/__tests__/e2e/Transition.spec.ts index 38fdf53cf4f..58797d82e73 100644 --- a/packages/vue/__tests__/e2e/Transition.spec.ts +++ b/packages/vue/__tests__/e2e/Transition.spec.ts @@ -1586,6 +1586,72 @@ describe('e2e: Transition', () => { expect(barMountSpy).toBeCalledTimes(1) expect(barMountSpy).toHaveBeenNthCalledWith(1, true, false, true) }) + + // #8105 + test( + 'trigger again when transition is not finished', + async () => { + await page().evaluate(duration => { + const { createApp, shallowRef, h } = (window as any).Vue + const One = { + async setup() { + return () => h('div', { class: 'test' }, 'one') + } + } + const Two = { + async setup() { + return () => h('div', { class: 'test' }, 'two') + } + } + createApp({ + template: ` +