) {
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,