From: underfin Date: Mon, 14 Sep 2020 20:02:29 +0000 (+0800) Subject: fix: inherit `el` for static nodes inside keyed `template` fragment (#2089) X-Git-Tag: v3.0.0-rc.11~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a32870a8f611dd1146bb17d5605b168a7805c73f;p=thirdparty%2Fvuejs%2Fcore.git fix: inherit `el` for static nodes inside keyed `template` fragment (#2089) fix #2080 --- diff --git a/packages/runtime-core/__tests__/rendererFragment.spec.ts b/packages/runtime-core/__tests__/rendererFragment.spec.ts index 9e1f87aec8..93140f13f4 100644 --- a/packages/runtime-core/__tests__/rendererFragment.spec.ts +++ b/packages/runtime-core/__tests__/rendererFragment.spec.ts @@ -10,9 +10,13 @@ import { dumpOps, NodeOpTypes, serializeInner, - createTextVNode + createTextVNode, + createBlock, + openBlock, + createCommentVNode } from '@vue/runtime-test' import { PatchFlags } from '@vue/shared' +import { renderList } from '../src/helpers/renderList' describe('renderer: fragment', () => { it('should allow returning multiple component root nodes', () => { @@ -269,4 +273,46 @@ describe('renderer: fragment', () => { render(null, root) expect(serializeInner(root)).toBe(``) }) + + // #2080 + test('`template` keyed fragment w/ comment + hoisted node', () => { + const root = nodeOps.createElement('div') + const hoisted = h('span') + + const renderFn = (items: string[]) => { + return ( + openBlock(true), + createBlock( + Fragment, + null, + renderList(items, item => { + return ( + openBlock(), + createBlock( + Fragment, + { key: item }, + [ + createCommentVNode('comment'), + hoisted, + createVNode('div', null, item, PatchFlags.TEXT) + ], + PatchFlags.STABLE_FRAGMENT + ) + ) + }), + PatchFlags.KEYED_FRAGMENT + ) + ) + } + + render(renderFn(['one', 'two']), root) + expect(serializeInner(root)).toBe( + `
one
two
` + ) + + render(renderFn(['two', 'one']), root) + expect(serializeInner(root)).toBe( + `
two
one
` + ) + }) }) diff --git a/packages/runtime-core/src/renderer.ts b/packages/runtime-core/src/renderer.ts index 670cd41f5c..5246fcb1ba 100644 --- a/packages/runtime-core/src/renderer.ts +++ b/packages/runtime-core/src/renderer.ts @@ -1153,8 +1153,10 @@ function baseCreateRenderer( parentSuspense, isSVG ) - if (__DEV__ && parentComponent && parentComponent.type.__hmrId) { - traverseStaticChildren(n1, n2) + // #2080 if the stable fragment has a key, it's a