diff --git a/packages/compiler-core/src/transforms/vModel.ts b/packages/compiler-core/src/transforms/vModel.ts index 16995994699..bf5e69beb2c 100644 --- a/packages/compiler-core/src/transforms/vModel.ts +++ b/packages/compiler-core/src/transforms/vModel.ts @@ -48,8 +48,9 @@ export const transformModel: DirectiveTransform = (dir, node, context) => { const maybeRef = !__BROWSER__ && context.inline && - bindingType && - bindingType !== BindingTypes.SETUP_CONST + (bindingType === BindingTypes.SETUP_LET || + bindingType === BindingTypes.SETUP_REF || + bindingType === BindingTypes.SETUP_MAYBE_REF) if ( !expString.trim() || diff --git a/packages/compiler-sfc/__tests__/compileScript.spec.ts b/packages/compiler-sfc/__tests__/compileScript.spec.ts index bf562defd24..b0a6c115e52 100644 --- a/packages/compiler-sfc/__tests__/compileScript.spec.ts +++ b/packages/compiler-sfc/__tests__/compileScript.spec.ts @@ -673,6 +673,26 @@ defineExpose({ foo: 123 }) assertCode(content) }) + test('v-model should not generate ref assignment code for non-setup bindings', () => { + const { content } = compile( + ` + + + `, + { inlineTemplate: true } + ) + expect(content).not.toMatch(`_isRef(foo)`) + }) + test('template assignment expression codegen', () => { const { content } = compile( `