From 46d875f4e8dfe8766d540272584ade23e6f1a273 Mon Sep 17 00:00:00 2001 From: Evan You Date: Thu, 10 Oct 2019 14:49:35 -0400 Subject: [PATCH] fix(runtime-core): use correct parentNode when patching dynamicChildren (close #98) --- packages/runtime-core/src/createRenderer.ts | 7 ++++--- packages/runtime-dom/src/nodeOps.ts | 9 +++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/runtime-core/src/createRenderer.ts b/packages/runtime-core/src/createRenderer.ts index 647a4ac9..2c836071 100644 --- a/packages/runtime-core/src/createRenderer.ts +++ b/packages/runtime-core/src/createRenderer.ts @@ -114,7 +114,7 @@ export interface RendererOptions { createComment(text: string): HostNode setText(node: HostNode, text: string): void setElementText(node: HostElement, text: string): void - parentNode(node: HostNode): HostNode | null + parentNode(node: HostNode): HostElement | null nextSibling(node: HostNode): HostNode | null querySelector(selector: string): HostElement | null } @@ -499,10 +499,11 @@ export function createRenderer< // children fast path const oldDynamicChildren = n1.dynamicChildren! for (let i = 0; i < dynamicChildren.length; i++) { + const oldVNode = oldDynamicChildren[i] patch( - oldDynamicChildren[i], + oldVNode, dynamicChildren[i], - el, + hostParentNode(oldVNode.el!)!, null, parentComponent, parentSuspense, diff --git a/packages/runtime-dom/src/nodeOps.ts b/packages/runtime-dom/src/nodeOps.ts index e7b3e86b..7e6b6ed3 100644 --- a/packages/runtime-dom/src/nodeOps.ts +++ b/packages/runtime-dom/src/nodeOps.ts @@ -4,7 +4,11 @@ const svgNS = 'http://www.w3.org/2000/svg' export const nodeOps = { insert: (child: Node, parent: Node, anchor?: Node) => { if (anchor != null) { - parent.insertBefore(child, anchor) + try { + parent.insertBefore(child, anchor) + } catch (e) { + debugger + } } else { parent.appendChild(child) } @@ -32,7 +36,8 @@ export const nodeOps = { el.textContent = text }, - parentNode: (node: Node): Node | null => node.parentNode, + parentNode: (node: Node): HTMLElement | null => + node.parentNode as HTMLElement, nextSibling: (node: Node): Node | null => node.nextSibling,