ソースを参照

fix(runtime-vapor): properly handle fast remove in keyed diff

daiwei 11 ヶ月 前
コミット
07fd7e4d41
1 ファイル変更3 行追加1 行削除
  1. 3 1
      packages/runtime-vapor/src/apiCreateFor.ts

+ 3 - 1
packages/runtime-vapor/src/apiCreateFor.ts

@@ -256,6 +256,7 @@ export const createFor = (
           const previousKeyIndexMap = new Map(previousKeyIndexPairs)
           const operations: (() => void)[] = []
 
+          let mountCounter = 0
           const relocateOrMountBlock = (
             blockIndex: number,
             blockItem: ReturnType<typeof getItem>,
@@ -280,6 +281,7 @@ export const createFor = (
                 )
               }
             } else {
+              mountCounter++
               operations.push(() =>
                 mount(
                   source,
@@ -310,7 +312,7 @@ export const createFor = (
             relocateOrMountBlock(i, blockItem, blockKey, -1)
           }
 
-          const useFastRemove = operations.length === newLength
+          const useFastRemove = mountCounter === newLength
 
           for (const leftoverIndex of previousKeyIndexMap.values()) {
             unmount(