fix(compiler-core): detect v-if branch root with comment as dev fragment (#2785)

fix #2780
This commit is contained in:
HcySunYang 2021-03-26 03:43:44 +08:00 committed by GitHub
parent 3755e60c52
commit 4bf7ba19bf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 8 deletions

View File

@ -16,7 +16,7 @@ return function render(_ctx, _cache) {
? (_openBlock(), _createBlock(\\"div\\", { key: 0 }, \\"yes\\")) ? (_openBlock(), _createBlock(\\"div\\", { key: 0 }, \\"yes\\"))
: (_openBlock(), _createBlock(_Fragment, { key: 1 }, [ : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [
_createTextVNode(\\"no\\") _createTextVNode(\\"no\\")
], 64 /* STABLE_FRAGMENT */)), ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */)),
(_openBlock(true), _createBlock(_Fragment, null, _renderList(list, (value, index) => { (_openBlock(true), _createBlock(_Fragment, null, _renderList(list, (value, index) => {
return (_openBlock(), _createBlock(\\"div\\", null, [ return (_openBlock(), _createBlock(\\"div\\", null, [
_createVNode(\\"span\\", null, _toDisplayString(value + index), 1 /* TEXT */) _createVNode(\\"span\\", null, _toDisplayString(value + index), 1 /* TEXT */)
@ -40,7 +40,7 @@ return function render(_ctx, _cache) {
? (_openBlock(), _createBlock(\\"div\\", { key: 0 }, \\"yes\\")) ? (_openBlock(), _createBlock(\\"div\\", { key: 0 }, \\"yes\\"))
: (_openBlock(), _createBlock(_Fragment, { key: 1 }, [ : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [
_createTextVNode(\\"no\\") _createTextVNode(\\"no\\")
], 64 /* STABLE_FRAGMENT */)), ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */)),
(_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.list, (value, index) => { (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.list, (value, index) => {
return (_openBlock(), _createBlock(\\"div\\", null, [ return (_openBlock(), _createBlock(\\"div\\", null, [
_createVNode(\\"span\\", null, _toDisplayString(value + index), 1 /* TEXT */) _createVNode(\\"span\\", null, _toDisplayString(value + index), 1 /* TEXT */)
@ -63,7 +63,7 @@ export function render(_ctx, _cache) {
? (_openBlock(), _createBlock(\\"div\\", { key: 0 }, \\"yes\\")) ? (_openBlock(), _createBlock(\\"div\\", { key: 0 }, \\"yes\\"))
: (_openBlock(), _createBlock(_Fragment, { key: 1 }, [ : (_openBlock(), _createBlock(_Fragment, { key: 1 }, [
_createTextVNode(\\"no\\") _createTextVNode(\\"no\\")
], 64 /* STABLE_FRAGMENT */)), ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */)),
(_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.list, (value, index) => { (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.list, (value, index) => {
return (_openBlock(), _createBlock(\\"div\\", null, [ return (_openBlock(), _createBlock(\\"div\\", null, [
_createVNode(\\"span\\", null, _toDisplayString(value + index), 1 /* TEXT */) _createVNode(\\"span\\", null, _toDisplayString(value + index), 1 /* TEXT */)

View File

@ -111,7 +111,7 @@ return function render(_ctx, _cache) {
? (_openBlock(), _createBlock(\\"div\\", { key: 0 })) ? (_openBlock(), _createBlock(\\"div\\", { key: 0 }))
: orNot : orNot
? (_openBlock(), _createBlock(\\"p\\", { key: 1 })) ? (_openBlock(), _createBlock(\\"p\\", { key: 1 }))
: (_openBlock(), _createBlock(_Fragment, { key: 2 }, [\\"fine\\"], 64 /* STABLE_FRAGMENT */)) : (_openBlock(), _createBlock(_Fragment, { key: 2 }, [\\"fine\\"], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))
} }
}" }"
`; `;

View File

@ -246,15 +246,24 @@ function createChildrenCodegenNode(
injectProp(vnodeCall, keyProperty, context) injectProp(vnodeCall, keyProperty, context)
return vnodeCall return vnodeCall
} else { } else {
let patchFlag = PatchFlags.STABLE_FRAGMENT
let patchFlagText = PatchFlagNames[PatchFlags.STABLE_FRAGMENT]
// check if the fragment actually contains a single valid child with
// the rest being comments
if (
__DEV__ &&
children.filter(c => c.type !== NodeTypes.COMMENT).length === 1
) {
patchFlag |= PatchFlags.DEV_ROOT_FRAGMENT
patchFlagText += `, ${PatchFlagNames[PatchFlags.DEV_ROOT_FRAGMENT]}`
}
return createVNodeCall( return createVNodeCall(
context, context,
helper(FRAGMENT), helper(FRAGMENT),
createObjectExpression([keyProperty]), createObjectExpression([keyProperty]),
children, children,
PatchFlags.STABLE_FRAGMENT + patchFlag + (__DEV__ ? ` /* ${patchFlagText} */` : ``),
(__DEV__
? ` /* ${PatchFlagNames[PatchFlags.STABLE_FRAGMENT]} */`
: ``),
undefined, undefined,
undefined, undefined,
true, true,