mirror of https://github.com/vuejs/core.git
fix(compiler-core): check if expression is constant (#7974)
close #7973
This commit is contained in:
parent
63ad77f6f6
commit
77686cf476
|
@ -13,6 +13,7 @@ import {
|
|||
} from '../../src'
|
||||
import { transformIf } from '../../src/transforms/vIf'
|
||||
import { transformExpression } from '../../src/transforms/transformExpression'
|
||||
import { PatchFlagNames, PatchFlags } from '../../../shared/src'
|
||||
|
||||
function parseWithExpressionTransform(
|
||||
template: string,
|
||||
|
@ -494,7 +495,9 @@ describe('compiler: expression transform', () => {
|
|||
setup: BindingTypes.SETUP_MAYBE_REF,
|
||||
setupConst: BindingTypes.SETUP_CONST,
|
||||
data: BindingTypes.DATA,
|
||||
options: BindingTypes.OPTIONS
|
||||
options: BindingTypes.OPTIONS,
|
||||
reactive: BindingTypes.SETUP_REACTIVE_CONST,
|
||||
literal: BindingTypes.LITERAL_CONST
|
||||
}
|
||||
|
||||
function compileWithBindingMetadata(
|
||||
|
@ -532,5 +535,25 @@ describe('compiler: expression transform', () => {
|
|||
expect(code).toMatch(`_ctx.options`)
|
||||
expect(code).toMatchSnapshot()
|
||||
})
|
||||
|
||||
test('literal const handling', () => {
|
||||
const { code } = compileWithBindingMetadata(`<div>{{ literal }}</div>`, {
|
||||
inline: true
|
||||
})
|
||||
// #7973 should skip patch for literal const
|
||||
expect(code).not.toMatch(
|
||||
`${PatchFlags.TEXT} /* ${PatchFlagNames[PatchFlags.TEXT]} */`
|
||||
)
|
||||
})
|
||||
|
||||
test('reactive const handling', () => {
|
||||
const { code } = compileWithBindingMetadata(`<div>{{ reactive }}</div>`, {
|
||||
inline: true
|
||||
})
|
||||
// #7973 should not skip patch for reactive const
|
||||
expect(code).toMatch(
|
||||
`${PatchFlags.TEXT} /* ${PatchFlagNames[PatchFlags.TEXT]} */`
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
|
@ -128,7 +128,11 @@ export function processExpression(
|
|||
const isDestructureAssignment =
|
||||
parent && isInDestructureAssignment(parent, parentStack)
|
||||
|
||||
if (isConst(type) || localVars[raw]) {
|
||||
if (
|
||||
isConst(type) ||
|
||||
type === BindingTypes.SETUP_REACTIVE_CONST ||
|
||||
localVars[raw]
|
||||
) {
|
||||
return raw
|
||||
} else if (type === BindingTypes.SETUP_REF) {
|
||||
return `${raw}.value`
|
||||
|
@ -371,8 +375,6 @@ export function stringifyExpression(exp: ExpressionNode | string): string {
|
|||
|
||||
function isConst(type: unknown) {
|
||||
return (
|
||||
type === BindingTypes.SETUP_CONST ||
|
||||
type === BindingTypes.LITERAL_CONST ||
|
||||
type === BindingTypes.SETUP_REACTIVE_CONST
|
||||
type === BindingTypes.SETUP_CONST || type === BindingTypes.LITERAL_CONST
|
||||
)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue