fix(compiler-ssr): only inject fallthrough attrs for root transition/keep-alive

This commit is contained in:
Evan You
2022-05-18 08:37:24 +08:00
parent c03459b9b6
commit c65b805ef1
2 changed files with 29 additions and 4 deletions

View File

@@ -11,8 +11,11 @@ import {
isBuiltInType
} from '@vue/compiler-dom'
const filterChild = (node: ParentNode) =>
node.children.filter(n => n.type !== NodeTypes.COMMENT)
const hasSingleChild = (node: ParentNode): boolean =>
node.children.filter(n => n.type !== NodeTypes.COMMENT).length === 1
filterChild(node).length === 1
export const ssrInjectFallthroughAttrs: NodeTransform = (node, context) => {
// _attrs is provided as a function argument.
@@ -28,10 +31,13 @@ export const ssrInjectFallthroughAttrs: NodeTransform = (node, context) => {
(isBuiltInType(node.tag, 'Transition') ||
isBuiltInType(node.tag, 'KeepAlive'))
) {
if (hasSingleChild(node)) {
injectFallthroughAttrs(node.children[0])
const rootChildren = filterChild(context.root)
if (rootChildren.length === 1 && rootChildren[0] === node) {
if (hasSingleChild(node)) {
injectFallthroughAttrs(node.children[0])
}
return
}
return
}
const parent = context.parent