File tree Expand file tree Collapse file tree 2 files changed +8
-4
lines changed
compiler-core/src/transforms Expand file tree Collapse file tree 2 files changed +8
-4
lines changed Original file line number Diff line number Diff line change @@ -219,6 +219,12 @@ function walk(
219
219
// #6978, #7138, #7114
220
220
// a cached children array inside v-for can caused HMR errors since
221
221
// it might be mutated when mounting the first item
222
+ // #13221
223
+ // fix memory leak in cached array:
224
+ // cached vnodes get replaced by cloned ones during mountChildren,
225
+ // which bind DOM elements. These DOM references persist after unmount,
226
+ // preventing garbage collection. Array spread avoids mutating cached
227
+ // array, preventing memory leaks.
222
228
exp . needArraySpread = true
223
229
return exp
224
230
}
Original file line number Diff line number Diff line change @@ -680,9 +680,7 @@ export function cloneVNode<T, U>(
680
680
scopeId : vnode . scopeId ,
681
681
slotScopeIds : vnode . slotScopeIds ,
682
682
children :
683
- // if vnode is cached, deep clone it's children to prevent cached children
684
- // from retaining detached DOM nodes
685
- patchFlag === PatchFlags . CACHED && isArray ( children )
683
+ __DEV__ && patchFlag === PatchFlags . CACHED && isArray ( children )
686
684
? ( children as VNode [ ] ) . map ( deepCloneVNode )
687
685
: children ,
688
686
target : vnode . target ,
@@ -740,7 +738,7 @@ export function cloneVNode<T, U>(
740
738
}
741
739
742
740
/**
743
- * for HMR of hoisted vnodes reused in v-for
741
+ * Dev only, for HMR of hoisted vnodes reused in v-for
744
742
* https://github.com/vitejs/vite/issues/2022
745
743
*/
746
744
function deepCloneVNode ( vnode : VNode ) : VNode {
You can’t perform that action at this time.
0 commit comments