mirror of https://github.com/vuejs/core.git
fix(runtime-core): fix move/removal of static fragments containing text nodes (#6858)
fix #6852
This commit is contained in:
parent
a54bff2c9c
commit
4049ffcf29
|
|
@ -315,4 +315,40 @@ describe('renderer: fragment', () => {
|
||||||
`<!--comment--><span></span><div>two</div><!--comment--><span></span><div>one</div>`
|
`<!--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)
|
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
|
// also inherit for comment nodes, but not placeholders (e.g. v-if which
|
||||||
// would have received .el during block patch)
|
// would have received .el during block patch)
|
||||||
if (__DEV__ && c2.type === Comment && !c2.el) {
|
if (__DEV__ && c2.type === Comment && !c2.el) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue