Просмотр исходного кода

fix: optimize virtualizer by memoizing scroll element and measurement functions

Yuki Takei 4 месяцев назад
Родитель
Сommit
ae70e2d16b
1 измененных файлов с 9 добавлено и 6 удалено
  1. 9 6
      apps/app/src/features/page-tree/components/ItemsTree.tsx

+ 9 - 6
apps/app/src/features/page-tree/components/ItemsTree.tsx

@@ -168,20 +168,23 @@ export const ItemsTree: FC<Props> = (props: Props) => {
     onExpanded: triggerTreeRebuild,
   });
 
-  // Stable estimate size function - memoize it to prevent recreating virtualizer
+  const getScrollElement = useCallback(() => scrollerElem ?? null, [scrollerElem]);
+
   const stableEstimateSize = useCallback(() => {
     return estimateTreeItemSize();
   }, [estimateTreeItemSize]);
 
+  const measureElement = useCallback((element: Element | null) => {
+    // Return consistent height measurement
+    return element?.getBoundingClientRect().height ?? stableEstimateSize();
+  }, [stableEstimateSize]);
+
   const virtualizer = useVirtualizer({
     count: items.length,
-    getScrollElement: () => scrollerElem ?? null,
+    getScrollElement,
     estimateSize: stableEstimateSize,
     overscan: 10,
-    measureElement: (element) => {
-      // Return consistent height measurement
-      return element?.getBoundingClientRect().height ?? stableEstimateSize();
-    },
+    measureElement,
   });
 
   // Scroll to selected item on mount or when targetPathOrId changes