From: Evan You Date: Wed, 10 Feb 2021 16:38:19 +0000 (-0500) Subject: fix(compiler-sfc): treat const reactive() bindings as mutable X-Git-Tag: v3.0.6~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=03360cefa1b7038174fa3c1fc3a04400b4cdbbce;p=thirdparty%2Fvuejs%2Fcore.git fix(compiler-sfc): treat const reactive() bindings as mutable --- diff --git a/packages/compiler-core/src/transforms/vFor.ts b/packages/compiler-core/src/transforms/vFor.ts index 5cff0eaea4..e42cfc7797 100644 --- a/packages/compiler-core/src/transforms/vFor.ts +++ b/packages/compiler-core/src/transforms/vFor.ts @@ -79,7 +79,7 @@ export const transformFor = createStructuralDirectiveTransform( const isStableFragment = forNode.source.type === NodeTypes.SIMPLE_EXPRESSION && - forNode.source.constType > ConstantTypes.CAN_SKIP_PATCH + forNode.source.constType > ConstantTypes.NOT_CONSTANT const fragmentFlag = isStableFragment ? PatchFlags.STABLE_FRAGMENT : keyProp diff --git a/packages/compiler-sfc/src/compileScript.ts b/packages/compiler-sfc/src/compileScript.ts index d0a08a8a5c..7b2a869c75 100644 --- a/packages/compiler-sfc/src/compileScript.ts +++ b/packages/compiler-sfc/src/compileScript.ts @@ -1036,12 +1036,15 @@ function walkDeclaration( ) if (id.type === 'Identifier') { let bindingType - if ( + const userReactiveBinding = userImportAlias['reactive'] || 'reactive' + if (isCallOf(init, userReactiveBinding)) { + // treat reactive() calls as let since it's meant to be mutable + bindingType = BindingTypes.SETUP_LET + } else if ( // if a declaration is a const literal, we can mark it so that // the generated render fn code doesn't need to unref() it isDefineCall || - (isConst && - canNeverBeRef(init!, userImportAlias['reactive'] || 'reactive')) + (isConst && canNeverBeRef(init!, userReactiveBinding)) ) { bindingType = BindingTypes.SETUP_CONST } else if (isConst) {