fix(renderer): should also use latest parent node when patching block child components

This commit is contained in:
Evan You 2019-12-18 17:09:28 -05:00
parent 3deb20df63
commit 9f52dce0d5

View File

@ -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,