@@ -59,6 +59,7 @@ export const transformFor = createStructuralDirectiveTransform(
59
59
const renderExp = createCallExpression ( helper ( RENDER_LIST ) , [
60
60
forNode . source
61
61
] ) as ForRenderListExpression
62
+ const isTemplate = isTemplateNode ( node )
62
63
const memo = findDir ( node , 'memo' )
63
64
const keyProp = findProp ( node , `key` )
64
65
const keyExp =
@@ -68,21 +69,23 @@ export const transformFor = createStructuralDirectiveTransform(
68
69
: keyProp . exp ! )
69
70
const keyProperty = keyProp ? createObjectProperty ( `key` , keyExp ! ) : null
70
71
71
- if (
72
- ! __BROWSER__ &&
73
- context . prefixIdentifiers &&
74
- keyProperty &&
75
- keyProp ! . type !== NodeTypes . ATTRIBUTE
76
- ) {
77
- // #2085 process :key expression needs to be processed in order for it
78
- // to behave consistently for <template v-for> and <div v-for>.
79
- // In the case of `<template v-for>`, the node is discarded and never
80
- // traversed so its key expression won't be processed by the normal
81
- // transforms.
82
- keyProperty . value = processExpression (
83
- keyProperty . value as SimpleExpressionNode ,
84
- context
85
- )
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
+ }
86
89
}
87
90
88
91
const isStableFragment =
@@ -112,7 +115,6 @@ export const transformFor = createStructuralDirectiveTransform(
112
115
return ( ) => {
113
116
// finish the codegen now that all children have been traversed
114
117
let childBlock : BlockCodegenNode
115
- const isTemplate = isTemplateNode ( node )
116
118
const { children } = forNode
117
119
118
120
// check <template v-for> key placement
0 commit comments