10
10
import VNode from './vnode'
11
11
import { isPrimitive , _toString , warn } from '../util/index'
12
12
13
- const emptyNode = new VNode ( '' , { } , [ ] )
13
+ const emptyData = { }
14
+ const emptyNode = new VNode ( '' , emptyData , [ ] )
14
15
const hooks = [ 'create' , 'update' , 'postpatch' , 'remove' , 'destroy' ]
15
16
16
17
function isUndef ( s ) {
@@ -267,13 +268,18 @@ export function createPatchFunction (backend) {
267
268
function patchVnode ( oldVnode , vnode , insertedVnodeQueue ) {
268
269
if ( oldVnode === vnode ) return
269
270
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
+ }
272
278
}
273
279
const elm = vnode . elm = oldVnode . elm
274
280
const oldCh = oldVnode . children
275
281
const ch = vnode . children
276
- if ( isDef ( vnode . data ) ) {
282
+ if ( hasData ) {
277
283
for ( i = 0 ; i < cbs . update . length ; ++ i ) cbs . update [ i ] ( oldVnode , vnode )
278
284
if ( isDef ( hook ) && isDef ( i = hook . update ) ) i ( oldVnode , vnode )
279
285
}
@@ -291,7 +297,7 @@ export function createPatchFunction (backend) {
291
297
} else if ( oldVnode . text !== vnode . text ) {
292
298
nodeOps . setTextContent ( elm , vnode . text )
293
299
}
294
- if ( isDef ( vnode . data ) ) {
300
+ if ( hasData ) {
295
301
for ( i = 0 ; i < cbs . postpatch . length ; ++ i ) cbs . postpatch [ i ] ( oldVnode , vnode )
296
302
if ( isDef ( hook ) && isDef ( i = hook . postpatch ) ) i ( oldVnode , vnode )
297
303
}
0 commit comments