Skip to content

Commit d4807ea

Browse files
committed
refactor(compiler): move operation with constant values out of renderEffect
Copy from https://github.com/vuejs/core/pull/12547/files
1 parent b809986 commit d4807ea

File tree

3 files changed

+56
-1
lines changed

3 files changed

+56
-1
lines changed

packages/compiler/src/transform.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {
22
defaultOnError,
33
defaultOnWarn,
4+
isConstantNode,
45
type TransformOptions as BaseTransformOptions,
56
type CommentNode,
67
type CompilerCompatOptions,
@@ -163,9 +164,15 @@ export class TransformContext<
163164
...operations: OperationNode[]
164165
) {
165166
expressions = expressions.filter((exp) => !isConstantExpression(exp))
166-
if (this.inVOnce || expressions.length === 0) {
167+
if (
168+
this.inVOnce ||
169+
expressions.length === 0 ||
170+
expressions.every((e) => e.ast && isConstantNode(e.ast, {}))
171+
) {
167172
return this.registerOperation(...operations)
168173
}
174+
175+
this.block.expressions.push(...expressions)
169176
const existing = this.block.effect.find((e) =>
170177
isSameExpression(e.expressions, expressions),
171178
)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2+
3+
exports[`compiler v-bind > with constant value 1`] = `
4+
"
5+
const n0 = t0()
6+
_setProp(n0, "a", void 0)
7+
_setProp(n0, "b", 1 > 2)
8+
_setProp(n0, "c", 1 + 2)
9+
_setProp(n0, "d", 1 ? 2 : 3)
10+
_setProp(n0, "e", 2)
11+
_setProp(n0, "f", \`foo1\`)
12+
_setProp(n0, "g", 1)
13+
_setProp(n0, "i", true)
14+
_setProp(n0, "j", null)
15+
_setProp(n0, "l", { foo: 1 })
16+
_setProp(n0, "n", { ...{ foo: 1 } })
17+
_setProp(n0, "o", [1, , 3])
18+
_setProp(n0, "p", [1, ...[2, 3]])
19+
_setProp(n0, "q", [1, 2])
20+
_setProp(n0, "r", /\\s+/)
21+
return n0
22+
"
23+
`;

packages/compiler/test/transforms/vBind.spec.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,4 +532,29 @@ describe('compiler v-bind', () => {
532532
expect(code).contains('_setAttr(n0, "foo-bar", _ctx.fooBar)')
533533
})
534534
*/
535+
536+
test('with constant value', () => {
537+
const { code } = compileWithVBind(
538+
`
539+
<div
540+
a={void 0}
541+
b={1 > 2}
542+
c={1 + 2}
543+
d={1 ? 2 : 3}
544+
e={(2)}
545+
f={\`foo${1}\`}
546+
g={1}
547+
h={'1'}
548+
i={true}
549+
j={null}
550+
l={{ foo: 1 }}
551+
n={{ ...{ foo: 1 } }}
552+
o={[1, , 3]}
553+
p={[1, ...[2, 3]]}
554+
q={[1, 2]}
555+
r={/\\s+/}
556+
/>`,
557+
)
558+
expect(code).matchSnapshot()
559+
})
535560
})

0 commit comments

Comments
 (0)