From 84440780f9e45aa5b060180078b769f27757c7bd Mon Sep 17 00:00:00 2001 From: Evan You Date: Wed, 8 Apr 2020 12:23:44 -0400 Subject: [PATCH] fix(slots): should update compiled dynamic slots --- packages/runtime-core/src/componentSlots.ts | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/runtime-core/src/componentSlots.ts b/packages/runtime-core/src/componentSlots.ts index dbc01848..e3c23f88 100644 --- a/packages/runtime-core/src/componentSlots.ts +++ b/packages/runtime-core/src/componentSlots.ts @@ -123,13 +123,18 @@ export const updateSlots = ( let deletionComparisonTarget = EMPTY_OBJ if (vnode.shapeFlag & ShapeFlags.SLOTS_CHILDREN) { if ((children as RawSlots)._ === 1) { - if (!(vnode.patchFlag & PatchFlags.DYNAMIC_SLOTS)) { - // compiled AND static. this means we can skip removal of potential - // stale slots + // compiled slots. + if ( + // bail on dynamic slots (v-if, v-for, reference of scope variables) + !(vnode.patchFlag & PatchFlags.DYNAMIC_SLOTS) && + // bail on HRM updates + !(__DEV__ && instance.parent && instance.parent.renderUpdated) + ) { + // compiled AND static. + // no need to update, and skip stale slots removal. needDeletionCheck = false - } - // HMR force update - if (__DEV__ && instance.parent && instance.parent.renderUpdated) { + } else { + // compiled but dynamic - update slots, but skip normalization. extend(slots, children as Slots) } } else {