fix(compiler-sfc): treat const reactive() bindings as mutable
This commit is contained in:
		
							parent
							
								
									cf67306032
								
							
						
					
					
						commit
						03360cefa1
					
				@ -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
 | 
			
		||||
 | 
			
		||||
@ -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) {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user