From fed8c8726105346bec9994e690dcc78f38ba122a Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Sun, 19 Dec 2021 15:08:12 +0800 Subject: [PATCH] fix(mp): camelize props (#3071) --- .../__tests__/component.spec.ts | 6 ++-- .../src/transforms/transformComponent.ts | 35 ++++++++++--------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/packages/uni-mp-compiler/__tests__/component.spec.ts b/packages/uni-mp-compiler/__tests__/component.spec.ts index 6bb956ce27..7871ac0cf0 100644 --- a/packages/uni-mp-compiler/__tests__/component.spec.ts +++ b/packages/uni-mp-compiler/__tests__/component.spec.ts @@ -115,10 +115,10 @@ describe('compiler: transform component', () => { }, }) assert( - ``, - ``, + ``, + ``, `(_ctx, _cache) => { - return {} + return { a: _p({ customStyle: 'background-color: unset;', closeOnClickOverlay: true }) } }`, { filename, diff --git a/packages/uni-mp-compiler/src/transforms/transformComponent.ts b/packages/uni-mp-compiler/src/transforms/transformComponent.ts index 4dbcee1872..b71b89ef11 100644 --- a/packages/uni-mp-compiler/src/transforms/transformComponent.ts +++ b/packages/uni-mp-compiler/src/transforms/transformComponent.ts @@ -1,3 +1,4 @@ +import { camelize } from '@vue/shared' import { ComponentNode, createSimpleExpression, @@ -23,6 +24,7 @@ import { } from './utils' import { genExpr, genBabelExpr } from '../codegen' import { + Expression, identifier, logicalExpression, objectExpression, @@ -140,9 +142,23 @@ function isComponentProp(name: string) { * @param context */ export function rewriteBinding( - { props }: ComponentNode, + { tag, props }: ComponentNode, context: TransformContext ) { + const isMiniProgramComponent = context.isMiniProgramComponent(tag) + + const createObjectProperty = isMiniProgramComponent + ? (name: string, value: Expression) => + objectProperty(identifier(camelize(name)), value) + : (name: string, value: Expression) => { + const computed = !isSimpleIdentifier(name) + return objectProperty( + computed ? stringLiteral(name) : identifier(name), + value, + computed + ) + } + const properties: ObjectProperty[] = [] for (let i = 0; i < props.length; i++) { const prop = props[i] @@ -151,13 +167,8 @@ export function rewriteBinding( if (!isComponentProp(name)) { continue } - const computed = !isSimpleIdentifier(name) properties.push( - objectProperty( - computed ? stringLiteral(name) : identifier(name), - stringLiteral(prop.value?.content || ''), - computed - ) + createObjectProperty(name, stringLiteral(prop.value?.content || '')) ) } else if (prop.type === NodeTypes.DIRECTIVE) { if (prop.name !== 'bind') { @@ -176,15 +187,7 @@ export function rewriteBinding( if (!valueExpr) { continue } - const name = arg.content - const computed = !isSimpleIdentifier(name) - properties.push( - objectProperty( - computed ? stringLiteral(name) : identifier(name), - valueExpr, - computed - ) - ) + properties.push(createObjectProperty(arg.content, valueExpr)) } else { // :[dynamic]="dynamic" const leftExpr = parseExpr(genExpr(arg), context, exp) -- GitLab