Skip to content

Commit

Permalink
fix(runtime-core): fix move/removal of static fragments containing te…
Browse files Browse the repository at this point in the history
…xt nodes (#6858)

fix #6852
  • Loading branch information
zhangzhonghe committed Nov 10, 2022
1 parent a54bff2 commit 4049ffc
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
36 changes: 36 additions & 0 deletions packages/runtime-core/__tests__/rendererFragment.spec.ts
Expand Up @@ -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>`)
})
})
4 changes: 4 additions & 0 deletions packages/runtime-core/src/renderer.ts
Expand Up @@ -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) {
Expand Down

0 comments on commit 4049ffc

Please sign in to comment.