diff --git a/packages/compiler-vapor/src/generators/prop.ts b/packages/compiler-vapor/src/generators/prop.ts index cf1bce982..fb23c1a4e 100644 --- a/packages/compiler-vapor/src/generators/prop.ts +++ b/packages/compiler-vapor/src/generators/prop.ts @@ -283,22 +283,29 @@ function processValue( needRewrite: boolean = true, ): string[] | undefined { const { processingRenderEffect, allRenderEffectSeenNames } = context - const { declareNames, earlyCheckExps, preAccessNames, preAccessExps } = - processingRenderEffect! + const { + declareNames, + rewrittenNames, + earlyCheckExps, + preAccessNames, + preAccessExps, + } = processingRenderEffect! for (const frag of values) { if (!isArray(frag)) continue // [code, newlineIndex, loc, name] -> [(__name), newlineIndex, loc, name] const [newName, , , rawName] = frag if (rawName) { - let name = rawName.replace(/[^\w]/g, '_') - - name = `_${name}` - if (!declareNames.has(name)) { - if (allRenderEffectSeenNames[name] === undefined) - allRenderEffectSeenNames[name] = 0 - else name += ++allRenderEffectSeenNames[name] - declareNames.add(name) + let name = rewrittenNames.get(rawName) + if (!name) { + name = `_${rawName.replace(/[^\w]/g, '_')}` + if (!declareNames.has(name)) { + if (allRenderEffectSeenNames[name] === undefined) + allRenderEffectSeenNames[name] = 0 + else name += ++allRenderEffectSeenNames[name] + declareNames.add(name) + } + rewrittenNames.set(newName, name) } const preAccessName = `_${name}` diff --git a/packages/compiler-vapor/src/ir/index.ts b/packages/compiler-vapor/src/ir/index.ts index e0e1d979a..a80a36ad1 100644 --- a/packages/compiler-vapor/src/ir/index.ts +++ b/packages/compiler-vapor/src/ir/index.ts @@ -263,7 +263,7 @@ export interface IREffect { identifiers: string[] operations: OperationNode[] declareNames: Set - rewrittenNames: Set + rewrittenNames: Map earlyCheckExps: string[] preAccessNames: Set preAccessExps: Set diff --git a/packages/compiler-vapor/src/transform.ts b/packages/compiler-vapor/src/transform.ts index f8484515c..34158f0f5 100644 --- a/packages/compiler-vapor/src/transform.ts +++ b/packages/compiler-vapor/src/transform.ts @@ -169,7 +169,7 @@ export class TransformContext { preAccessNames: new Set(), preAccessExps: new Set(), declareNames: new Set(), - rewrittenNames: new Set(), + rewrittenNames: new Map(), inVFor: this.inVFor > 0, identifiers: Array.from(ids), })