fix(keep-alive): do not invoke onVnodeBeforeUnmount if is KeepAlive component (#1079)

This commit is contained in:
Carlos Rodrigues
2020-04-30 19:52:03 +01:00
committed by GitHub
parent 2e0373bb7a
commit 239270c38a
2 changed files with 102 additions and 4 deletions

View File

@@ -1713,6 +1713,7 @@ function baseCreateRenderer(
) => {
const { props, ref, children, dynamicChildren, shapeFlag, dirs } = vnode
const shouldInvokeDirs = shapeFlag & ShapeFlags.ELEMENT && dirs
const shouldKeepAlive = shapeFlag & ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE
let vnodeHook: VNodeHook | undefined | null
// unset ref
@@ -1720,12 +1721,12 @@ function baseCreateRenderer(
setRef(ref, null, parentComponent, null)
}
if ((vnodeHook = props && props.onVnodeBeforeUnmount)) {
if ((vnodeHook = props && props.onVnodeBeforeUnmount) && !shouldKeepAlive) {
invokeVNodeHook(vnodeHook, parentComponent, vnode)
}
if (shapeFlag & ShapeFlags.COMPONENT) {
if (shapeFlag & ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE) {
if (shouldKeepAlive) {
;(parentComponent!.ctx as KeepAliveContext).deactivate(vnode)
} else {
unmountComponent(vnode.component!, parentSuspense, doRemove)
@@ -1757,7 +1758,10 @@ function baseCreateRenderer(
}
}
if ((vnodeHook = props && props.onVnodeUnmounted) || shouldInvokeDirs) {
if (
((vnodeHook = props && props.onVnodeUnmounted) || shouldInvokeDirs) &&
!shouldKeepAlive
) {
queuePostRenderEffect(() => {
vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode)
shouldInvokeDirs &&