From: Evan You Date: Thu, 10 Nov 2022 07:29:17 +0000 (+0800) Subject: fix(v-model): fix incorrect codegen for non-ref bindings X-Git-Tag: v3.2.45~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=15e889afaf75143484946b2dde281572ebf9e8ab;p=thirdparty%2Fvuejs%2Fcore.git fix(v-model): fix incorrect codegen for non-ref bindings fix #6241 --- diff --git a/packages/compiler-core/src/transforms/vModel.ts b/packages/compiler-core/src/transforms/vModel.ts index 1699599469..bf5e69beb2 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 bf562defd2..b0a6c115e5 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( `