From: Evan You Date: Wed, 18 Dec 2019 22:09:28 +0000 (-0500) Subject: fix(renderer): should also use latest parent node when patching block child components X-Git-Tag: v3.0.0-alpha.0~16 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9f52dce0d58f5bc09dded9291eadbb6b1af2dcbe;p=thirdparty%2Fvuejs%2Fcore.git fix(renderer): should also use latest parent node when patching block child components --- diff --git a/packages/runtime-core/src/renderer.ts b/packages/runtime-core/src/renderer.ts index 133a21c246..9fc0ebb681 100644 --- a/packages/runtime-core/src/renderer.ts +++ b/packages/runtime-core/src/renderer.ts @@ -594,21 +594,24 @@ export function createRenderer< ) { for (let i = 0; i < newChildren.length; i++) { const oldVNode = oldChildren[i] - if (!oldVNode) { - debugger - } + // Determine the container (parent element) for the patch. + // - In the case of a Fragment, we need to provide the actual parent + // of the Fragment itself so it can move its children. + // - In the case of a Comment, this is likely a v-if toggle, which also + // needs the correct parent container. + // - In the case of a component, it could contain anything. + // In other cases, the parent container is not actually used so we just + // pass the block element here to avoid a DOM parentNode call. + const container = + oldVNode.type === Fragment || + oldVNode.type === Comment || + oldVNode.shapeFlag & ShapeFlags.COMPONENT + ? hostParentNode(oldVNode.el!)! + : fallbackContainer patch( oldVNode, newChildren[i], - // - In the case of a Fragment, we need to provide the actual parent - // of the Fragment itself so it can move its children. - // - In the case of a Comment, this is likely a v-if toggle, which also - // needs the correct parent container. - // In other cases, the parent container is not actually used so we just - // pass the block element here to avoid a DOM parentNode call. - oldVNode.type === Fragment || oldVNode.type === Comment - ? hostParentNode(oldVNode.el!)! - : fallbackContainer, + container, null, parentComponent, parentSuspense,