]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix: clone vnode before mutating flags
authorEvan You <yyx990803@gmail.com>
Thu, 27 Sep 2018 14:23:31 +0000 (10:23 -0400)
committerEvan You <yyx990803@gmail.com>
Thu, 27 Sep 2018 14:23:31 +0000 (10:23 -0400)
packages/core/src/optional/keepAlive.ts

index bd5e33557e194a1fbfcdf05c2e65f38c957df7b8..c36fc52c108cf5060a101a548982175777c908ba 100644 (file)
@@ -1,5 +1,5 @@
 import { Component, ComponentClass, MountedComponent } from '../component'
-import { VNode, Slots } from '../vdom'
+import { VNode, Slots, cloneVNode } from '../vdom'
 import { VNodeFlags } from '../flags'
 
 type MatchPattern = string | RegExp | string[] | RegExp[]
@@ -81,6 +81,11 @@ export class KeepAlive extends Component<{}, KeepAliveProps> {
     const { cache, keys } = this
     const key = vnode.key == null ? comp : vnode.key
     const cached = cache.get(key)
+
+    // clone vnode if it's reused because we are going to mutate its flags
+    if (vnode.el) {
+      vnode = cloneVNode(vnode)
+    }
     cache.set(key, vnode)
 
     if (cached) {