From: Evan You Date: Sun, 23 Jan 2022 13:37:54 +0000 (+0800) Subject: fix(runtime-dom): fix static content re-insertion X-Git-Tag: v3.2.29~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9aa5dfd4bb8efac0041e33ef5fdbebab59cc6516;p=thirdparty%2Fvuejs%2Fcore.git fix(runtime-dom): fix static content re-insertion fix #5308 The regression was introduced in ed9eb62. In the cached code path, we attempt re-insertion by cloning cached nodes. However if the static fragment was removed as component root, it loses the nodes between start and end because each node was removed individually. Therefore the cached path can only be taken if the fragment has a single node, or it was removed as part of a parent tree so the sibling information is still available. --- diff --git a/packages/runtime-dom/src/nodeOps.ts b/packages/runtime-dom/src/nodeOps.ts index c3a4f4ba64..16762580e9 100644 --- a/packages/runtime-dom/src/nodeOps.ts +++ b/packages/runtime-dom/src/nodeOps.ts @@ -76,7 +76,10 @@ export const nodeOps: Omit, 'patchProp'> = { insertStaticContent(content, parent, anchor, isSVG, start, end) { // before | first ... last | anchor const before = anchor ? anchor.previousSibling : parent.lastChild - if (start && end) { + // #5308 can only take cached path if: + // - has a single root node + // - nextSibling info is still available + if (start && (start === end || start.nextSibling)) { // cached while (true) { parent.insertBefore(start!.cloneNode(true), anchor)