Browse Source
fix(runtime-core): fix move/removal of static fragments containing text nodes (#6858)
fix #6852
pull/7089/head
被雨水过滤的空气(Rairn)
3 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
40 additions and
0 deletions
-
packages/runtime-core/__tests__/rendererFragment.spec.ts
-
packages/runtime-core/src/renderer.ts
|
|
@ -315,4 +315,40 @@ describe('renderer: fragment', () => { |
|
|
|
`<!--comment--><span></span><div>two</div><!--comment--><span></span><div>one</div>` |
|
|
|
) |
|
|
|
}) |
|
|
|
|
|
|
|
// #6852
|
|
|
|
test('`template` keyed fragment w/ text', () => { |
|
|
|
const root = nodeOps.createElement('div') |
|
|
|
|
|
|
|
const renderFn = (items: string[]) => { |
|
|
|
return ( |
|
|
|
openBlock(true), |
|
|
|
createBlock( |
|
|
|
Fragment, |
|
|
|
null, |
|
|
|
renderList(items, item => { |
|
|
|
return ( |
|
|
|
openBlock(), |
|
|
|
createBlock( |
|
|
|
Fragment, |
|
|
|
{ key: item }, |
|
|
|
[ |
|
|
|
createTextVNode('text'), |
|
|
|
createVNode('div', null, item, PatchFlags.TEXT) |
|
|
|
], |
|
|
|
PatchFlags.STABLE_FRAGMENT |
|
|
|
) |
|
|
|
) |
|
|
|
}), |
|
|
|
PatchFlags.KEYED_FRAGMENT |
|
|
|
) |
|
|
|
) |
|
|
|
} |
|
|
|
|
|
|
|
render(renderFn(['one', 'two']), root) |
|
|
|
expect(serializeInner(root)).toBe(`text<div>one</div>text<div>two</div>`) |
|
|
|
|
|
|
|
render(renderFn(['two', 'one']), root) |
|
|
|
expect(serializeInner(root)).toBe(`text<div>two</div>text<div>one</div>`) |
|
|
|
}) |
|
|
|
}) |
|
|
@ -2386,6 +2386,10 @@ export function traverseStaticChildren(n1: VNode, n2: VNode, shallow = false) { |
|
|
|
} |
|
|
|
if (!shallow) traverseStaticChildren(c1, c2) |
|
|
|
} |
|
|
|
// #6852 also inherit for text nodes
|
|
|
|
if (c2.type === Text) { |
|
|
|
c2.el = c1.el |
|
|
|
} |
|
|
|
// also inherit for comment nodes, but not placeholders (e.g. v-if which
|
|
|
|
// would have received .el during block patch)
|
|
|
|
if (__DEV__ && c2.type === Comment && !c2.el) { |
|
|
|