fix(compiler-core): dedupe renderSlot's default props (#4557)

This commit is contained in:
Herrington Darkholme
2021-09-22 00:31:27 +08:00
committed by GitHub
parent ed6470c845
commit 044812525f
2 changed files with 31 additions and 13 deletions

View File

@@ -20,29 +20,27 @@ export const transformSlotOutlet: NodeTransform = (node, context) => {
const slotArgs: CallExpression['arguments'] = [
context.prefixIdentifiers ? `_ctx.$slots` : `$slots`,
slotName
slotName,
'{}',
'undefined',
'true'
]
let expectedLen = 2
if (slotProps) {
slotArgs.push(slotProps)
slotArgs[2] = slotProps
expectedLen = 3
}
if (children.length) {
if (!slotProps) {
slotArgs.push(`{}`)
}
slotArgs.push(createFunctionExpression([], children, false, false, loc))
slotArgs[3] = createFunctionExpression([], children, false, false, loc)
expectedLen = 4
}
if (context.scopeId && !context.slotted) {
if (!slotProps) {
slotArgs.push(`{}`)
}
if (!children.length) {
slotArgs.push(`undefined`)
}
slotArgs.push(`true`)
expectedLen = 5
}
slotArgs.splice(expectedLen) // remove unused arguments
node.codegenNode = createCallExpression(
context.helper(RENDER_SLOT),