Open moonlight718 opened 4 years ago
如注释所示:
function patchPortal(prevVNode, nextVNode) { patchChildren( prevVNode.childFlags, nextVNode.childFlags, prevVNode.children, nextVNode.children, prevVNode.tag // prevVNode.tag 只是一个字符串,不是一个dom,此处应该改为 document.querySelector(prevVNode.tag) // 否则当 prevVNode 有一个子节点,nextVNode 有多个子节点时,涉及到 removeChild,代码会报错 ); nextVNode.el = prevVNode.el; if (nextVNode.tag !== prevVNode.tag) { const container = typeof nextVNode.tag === "string" ? document.querySelector(nextVNode.tag) : nextVNode.tag; switch (nextVNode.childFlags) { case ChildrenFlags.SINGLE_VNODE: container.appendChild(nextVNode.children.el); break; case ChildrenFlags.NO_CHILDREN: break; default: for (let i = 0; i < nextVNode.children.length; i++) { container.appendChild(nextVNode.children[i].el); } break; } } }
如注释所示: