Skip to content

Commit 82f4981

Browse files
committed
ensure oldVnode always has data during patch
1 parent 3c523f2 commit 82f4981

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

src/core/vdom/patch.js

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
import VNode from './vnode'
1111
import { isPrimitive, _toString, warn } from '../util/index'
1212

13-
const emptyNode = new VNode('', {}, [])
13+
const emptyData = {}
14+
const emptyNode = new VNode('', emptyData, [])
1415
const hooks = ['create', 'update', 'postpatch', 'remove', 'destroy']
1516

1617
function isUndef (s) {
@@ -267,13 +268,18 @@ export function createPatchFunction (backend) {
267268
function patchVnode (oldVnode, vnode, insertedVnodeQueue) {
268269
if (oldVnode === vnode) return
269270
let i, hook
270-
if (isDef(i = vnode.data) && isDef(hook = i.hook) && isDef(i = hook.prepatch)) {
271-
i(oldVnode, vnode)
271+
const hasData = isDef(i = vnode.data)
272+
if (hasData) {
273+
// ensure the oldVnode also has data during patch
274+
oldVnode.data = oldVnode.data || emptyData
275+
if (isDef(hook = i.hook) && isDef(i = hook.prepatch)) {
276+
i(oldVnode, vnode)
277+
}
272278
}
273279
const elm = vnode.elm = oldVnode.elm
274280
const oldCh = oldVnode.children
275281
const ch = vnode.children
276-
if (isDef(vnode.data)) {
282+
if (hasData) {
277283
for (i = 0; i < cbs.update.length; ++i) cbs.update[i](oldVnode, vnode)
278284
if (isDef(hook) && isDef(i = hook.update)) i(oldVnode, vnode)
279285
}
@@ -291,7 +297,7 @@ export function createPatchFunction (backend) {
291297
} else if (oldVnode.text !== vnode.text) {
292298
nodeOps.setTextContent(elm, vnode.text)
293299
}
294-
if (isDef(vnode.data)) {
300+
if (hasData) {
295301
for (i = 0; i < cbs.postpatch.length; ++i) cbs.postpatch[i](oldVnode, vnode)
296302
if (isDef(hook) && isDef(i = hook.postpatch)) i(oldVnode, vnode)
297303
}

0 commit comments

Comments
 (0)