Skip to content

Commit 06aba4a

Browse files
authored
Update vFor.ts
1 parent 7ee27ac commit 06aba4a

File tree

1 file changed

+18
-24
lines changed
  • packages/compiler-core/src/transforms

1 file changed

+18
-24
lines changed

packages/compiler-core/src/transforms/vFor.ts

+18-24
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,8 @@ export const transformFor = createStructuralDirectiveTransform(
5959
const renderExp = createCallExpression(helper(RENDER_LIST), [
6060
forNode.source
6161
]) as ForRenderListExpression
62+
const isTemplate = isTemplateNode(node)
6263
const memo = findDir(node, 'memo')
63-
64-
if (memo && isTemplateNode(node)) {
65-
memo.exp = processExpression(
66-
memo.exp! as SimpleExpressionNode,
67-
context
68-
)
69-
}
70-
7164
const keyProp = findProp(node, `key`)
7265
const keyExp =
7366
keyProp &&
@@ -76,21 +69,23 @@ export const transformFor = createStructuralDirectiveTransform(
7669
: keyProp.exp!)
7770
const keyProperty = keyProp ? createObjectProperty(`key`, keyExp!) : null
7871

79-
if (
80-
!__BROWSER__ &&
81-
context.prefixIdentifiers &&
82-
keyProperty &&
83-
keyProp!.type !== NodeTypes.ATTRIBUTE
84-
) {
85-
// #2085 process :key expression needs to be processed in order for it
86-
// to behave consistently for <template v-for> and <div v-for>.
87-
// In the case of `<template v-for>`, the node is discarded and never
88-
// traversed so its key expression won't be processed by the normal
89-
// transforms.
90-
keyProperty.value = processExpression(
91-
keyProperty.value as SimpleExpressionNode,
92-
context
93-
)
72+
if (!__BROWSER__ && isTemplate) {
73+
// #2085 / #5288 process :key and v-memo expressions need to be
74+
// processed on `<template v-for>`. In this case the node is discarded
75+
// and never traversed so its binding expressions won't be processed
76+
// by the normal transforms.
77+
if (memo) {
78+
memo.exp = processExpression(
79+
memo.exp! as SimpleExpressionNode,
80+
context
81+
)
82+
}
83+
if (keyProperty && keyProp!.type !== NodeTypes.ATTRIBUTE) {
84+
keyProperty.value = processExpression(
85+
keyProperty.value as SimpleExpressionNode,
86+
context
87+
)
88+
}
9489
}
9590

9691
const isStableFragment =
@@ -120,7 +115,6 @@ export const transformFor = createStructuralDirectiveTransform(
120115
return () => {
121116
// finish the codegen now that all children have been traversed
122117
let childBlock: BlockCodegenNode
123-
const isTemplate = isTemplateNode(node)
124118
const { children } = forNode
125119

126120
// check <template v-for> key placement

0 commit comments

Comments
 (0)