소스 검색

wip(vapor): fix v-for update check + avoid unnecessary tracking overhead during diff

Evan You 1 년 전
부모
커밋
11383ae72d
1개의 변경된 파일7개의 추가작업 그리고 1개의 파일을 삭제
  1. 7 1
      packages/runtime-vapor/src/apiCreateFor.ts

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

@@ -3,6 +3,8 @@ import {
   type ShallowRef,
   isReactive,
   isShallow,
+  pauseTracking,
+  resetTracking,
   shallowReadArray,
   shallowRef,
   toReactive,
@@ -88,6 +90,8 @@ export const createFor = (
     const oldLength = oldBlocks.length
     newBlocks = new Array(newLength)
 
+    pauseTracking()
+
     if (!isMounted) {
       isMounted = true
       for (let i = 0; i < newLength; i++) {
@@ -269,6 +273,8 @@ export const createFor = (
     if (parentAnchor) {
       frag.nodes.push(parentAnchor)
     }
+
+    resetTracking()
   }
 
   const needKey = renderItem.length > 1
@@ -326,7 +332,7 @@ export const createFor = (
     newKey?: any,
     newIndex?: any,
   ) => {
-    if (newIndex !== itemRef.value) {
+    if (newItem !== itemRef.value) {
       itemRef.value = newItem
     }
     if (keyRef && newKey !== undefined && newKey !== keyRef.value) {