From 15e889afaf75143484946b2dde281572ebf9e8ab Mon Sep 17 00:00:00 2001 From: Evan You Date: Thu, 10 Nov 2022 15:29:17 +0800 Subject: [PATCH] fix(v-model): fix incorrect codegen for non-ref bindings fix #6241 --- .../compiler-core/src/transforms/vModel.ts | 5 +++-- .../__tests__/compileScript.spec.ts | 20 +++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) 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( `