From bf98f4999370b596fa2370b573da195334d81a7a Mon Sep 17 00:00:00 2001 From: daiwei Date: Sun, 16 Jan 2022 16:19:01 +0800 Subject: [PATCH 1/3] fix(Transition): dev root fragment should have transition --- packages/runtime-core/src/renderer.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/runtime-core/src/renderer.ts b/packages/runtime-core/src/renderer.ts index 04bebdb1f0e..a433909babd 100644 --- a/packages/runtime-core/src/renderer.ts +++ b/packages/runtime-core/src/renderer.ts @@ -2155,7 +2155,23 @@ function baseCreateRenderer( const remove: RemoveFn = vnode => { const { type, el, anchor, transition } = vnode if (type === Fragment) { - removeFragment(el!, anchor!) + if ( + __DEV__ && + vnode.patchFlag > 0 && + vnode.patchFlag & PatchFlags.DEV_ROOT_FRAGMENT && + transition && + !transition.persisted + ) { + ;(vnode.children as VNode[]).forEach(child => { + if (child.type === Comment) { + hostRemove(child.el!) + } else { + remove(child) + } + }) + } else { + removeFragment(el!, anchor!) + } return } From b51167ff47e65f3ab67966239c70357c9fded9f2 Mon Sep 17 00:00:00 2001 From: daiwei Date: Sun, 16 Jan 2022 19:56:47 +0800 Subject: [PATCH 2/3] test: add test case --- packages/vue/__tests__/Transition.spec.ts | 74 ++++++++++++++++++++++- 1 file changed, 71 insertions(+), 3 deletions(-) diff --git a/packages/vue/__tests__/Transition.spec.ts b/packages/vue/__tests__/Transition.spec.ts index 97b3ccd9625..37204939511 100644 --- a/packages/vue/__tests__/Transition.spec.ts +++ b/packages/vue/__tests__/Transition.spec.ts @@ -1979,9 +1979,7 @@ describe('e2e: Transition', () => { ` }).mount(document.createElement('div')) - expect( - `invalid mode: none` - ).toHaveBeenWarned() + expect(`invalid mode: none`).toHaveBeenWarned() }) // #3227 @@ -2023,4 +2021,74 @@ describe('e2e: Transition', () => { expect(outerSpy).toHaveBeenCalledTimes(1) expect(root.innerHTML).toBe(``) }) + + test( + 'should work with dev root fragment', + async () => { + await page().evaluate(() => { + const { createApp, ref } = (window as any).Vue + createApp({ + components: { + Comp: { + template: ` + +
+ ` + } + }, + template: ` +
+ + +
content
+
+
+
+ + `, + setup: () => { + const toggle = ref(true) + const click = () => (toggle.value = !toggle.value) + return { toggle, click } + } + }).mount('#app') + }) + expect(await html('#container')).toBe( + '
content
' + ) + + // leave + expect(await classWhenTransitionStart()).toStrictEqual([ + 'test', + 'v-leave-from', + 'v-leave-active' + ]) + await nextFrame() + expect(await classList('.test')).toStrictEqual([ + 'test', + 'v-leave-active', + 'v-leave-to' + ]) + await transitionFinish() + expect(await html('#container')).toBe('') + + // enter + expect(await classWhenTransitionStart()).toStrictEqual([ + 'test', + 'v-enter-from', + 'v-enter-active' + ]) + await nextFrame() + expect(await classList('.test')).toStrictEqual([ + 'test', + 'v-enter-active', + 'v-enter-to' + ]) + await transitionFinish() + expect(await html('#container')).toBe( + '
content
' + ) + }, + E2E_TIMEOUT + ) }) From bb51e3915a63594df78ae936271a0a46ea8f3afb Mon Sep 17 00:00:00 2001 From: wxsm Date: Tue, 14 Dec 2021 21:21:19 +0800 Subject: [PATCH 3/3] docs: update readme (#5097) [ci skip] --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 495897150ea..6c283257230 100644 --- a/README.md +++ b/README.md @@ -74,8 +74,7 @@ It is recommended to use [VSCode](https://code.visualstudio.com/). There are cur ### TypeScript Support - All Vue 3 packages ship with types. -- [vue-tsc](https://github.com/johnsoncodehk/vue-tsc) perform TypeScript type checks / diagnostics on Vue SFCs via the command line. -- [vue-dts-gen](https://github.com/egoist/vue-dts-gen): generate TypeScript definitions from Vue SFCs. +- [vue-tsc](https://github.com/johnsoncodehk/volar/tree/master/packages/vue-tsc) perform TypeScript type checks / diagnostics on Vue SFCs via the command line, generate TypeScript definitions from Vue SFCs. ### Other Projects