diff --git a/packages/runtime-core/src/rendererTemplateRef.ts b/packages/runtime-core/src/rendererTemplateRef.ts index bffe1a25321..ac703e07377 100644 --- a/packages/runtime-core/src/rendererTemplateRef.ts +++ b/packages/runtime-core/src/rendererTemplateRef.ts @@ -139,7 +139,8 @@ export function setRef( warn('Invalid template ref type:', ref, `(${typeof ref})`) } } - if (value) { + + if (value || (vnode.transition && !vnode.transition.persisted)) { // #1789: for non-null values, set them after render // null values means this is unmount and it should not overwrite another // ref with the same key diff --git a/packages/vue/__tests__/e2e/TransitionGroup.spec.ts b/packages/vue/__tests__/e2e/TransitionGroup.spec.ts index 22f22540902..d243c00aa2b 100644 --- a/packages/vue/__tests__/e2e/TransitionGroup.spec.ts +++ b/packages/vue/__tests__/e2e/TransitionGroup.spec.ts @@ -297,6 +297,57 @@ describe('e2e: TransitionGroup', () => { E2E_TIMEOUT, ) + test( + 'ref', + async () => { + await page().evaluate(() => { + const { createApp, ref } = (window as any).Vue + createApp({ + template: ` +