VirtualTreeView

A virtualized tree view component that only renders visible items for efficient rendering of large trees. Use this when you have thousands of items and need smooth scrolling performance.

When to Use

  • Large datasets: Trees with 1,000+ items
  • Performance critical: When smooth scrolling is essential
  • Deep hierarchies: Deeply nested structures with many expanded nodes

For smaller trees (< 500 items), the regular TreeView component works well.

Large Dataset Demo (5,000+ items)

This demo shows a tree with over 5,000 items. Despite the large dataset, scrolling remains smooth because only visible items are rendered.

5,250 total items, 5,250 visible
project-1
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
import { VirtualTreeView, useTreeState } from "@vuer-ai/vuer-uikit";

function LargeTreeDemo() {
  const [hoveredId, setHoveredId] = useState(null);

  // Large dataset with 5000+ items
  const { visibleData, expandedItems, toggleItem, hasDescendants } = useTreeState({
    data: largeFileSystemData,
    defaultExpanded: true,
  });

  return (
    <VirtualTreeView
      data={visibleData}
      getIcon={getFileIcon}
      height={400}
      hoveredId={hoveredId}
      onItemHover={setHoveredId}
      expandedItems={expandedItems}
      onToggleItem={toggleItem}
      hasDescendants={hasDescendants}
    />
  );
}

Performance Comparison

Compare the VirtualTreeView (left) with the regular TreeView (right). Try scrolling both - the virtual version maintains consistent performance.

Total items: 1,300
VirtualTreeView
project-1
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
Regular TreeView
project-1
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
project-2
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
project-3
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
project-4
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
project-5
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
project-6
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
project-7
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
project-8
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
project-9
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
project-10
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
project-11
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
project-12
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
project-13
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
project-14
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
project-15
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
project-16
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
project-17
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
project-18
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
project-19
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
project-20
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
tests
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
docs
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
lib
file-1.ts
file-2.tsx
file-3.js
file-4.json
file-5.md
file-6.ts
file-7.tsx
file-8.js
file-9.json
file-10.md
file-11.ts
file-12.tsx
file-13.js
file-14.json
file-15.md
// VirtualTreeView - only renders visible items
<VirtualTreeView
  data={visibleData}
  getIcon={getFileIcon}
  height={300}
  expandedItems={expandedItems}
  onToggleItem={toggleItem}
  hasDescendants={hasDescendants}
/>

// Regular TreeView - renders all items
<TreeView
  data={visibleData}
  getIcon={getFileIcon}
  expandedItems={expandedItems}
  onToggleItem={toggleItem}
  hasDescendants={hasDescendants}
/>

With Selection

VirtualTreeView supports all the selection features of the regular TreeView:

  • Single click: Select one item
  • Ctrl/Cmd + click: Toggle selection
  • Shift + click: Range selection
Selected: 0 items
project-1
src
file-1.ts
file-2.tsx
file-3.js
file-4.json
function SelectableVirtualTree() {
  const [selectedIds, setSelectedIds] = useState(new Set());

  return (
    <VirtualTreeView
      data={visibleData}
      getIcon={getFileIcon}
      height={350}
      isSelectable
      selectedItemIds={selectedIds}
      onSelectionChange={setSelectedIds}
      expandedItems={expandedItems}
      onToggleItem={toggleItem}
      hasDescendants={hasDescendants}
    />
  );
}

Deeply Nested Tree

Handles deeply nested hierarchies efficiently. Click "Expand All" to see all 1,300+ nodes rendered smoothly.

1,364 total, 4 visible
level-1
level-2
level-3
level-4
function DeepTreeDemo() {
  const { visibleData, expandedItems, toggleItem, hasDescendants, expandAll, collapseAll } =
    useTreeState({
      data: deepTreeData,
      defaultExpanded: false,
    });

  return (
    <>
      <div className="flex gap-2 mb-2">
        <button onClick={expandAll}>Expand All</button>
        <button onClick={collapseAll}>Collapse All</button>
      </div>
      <VirtualTreeView
        data={visibleData}
        getIcon={getFileIcon}
        height={350}
        expandedItems={expandedItems}
        onToggleItem={toggleItem}
        hasDescendants={hasDescendants}
      />
    </>
  );
}

Props

PropTypeDefaultDescription
dataTreeDataItemWithMeta<T>[]-Processed tree data from useTreeState
getIcon(item: T, expanded?: boolean) => ReactNode-Icon renderer function
heightnumber | string'100%'Container height (required for virtualization)
overscannumber5Extra items to render outside visible area
expandedItemsSet<string>-Set of expanded item IDs
onToggleItem(id: string) => void-Expand/collapse handler
hoveredIdstring | null-Currently hovered item ID
onItemHover(id: string | null) => void-Hover change handler
isSelectablebooleanfalseEnable item selection
selectedItemIdsSet<string>-Set of selected item IDs
onSelectionChange(ids: Set<string>) => void-Selection change handler
selectionMode'single' | 'multi''multi'Selection mode
hideExpandbooleanfalseHide expand buttons
hasDescendants(id: string) => boolean() => falseCheck if item has children
renderLabel(label: string, id: string) => ReactNode-Custom label renderer
renderContextMenu(item: T) => ReactNode-Context menu renderer
classNamestring-Additional CSS classes

Usage

import { VirtualTreeView, useTreeState } from '@vuer-ai/vuer-uikit';

function MyFileTree({ data }) {
  const [hoveredId, setHoveredId] = useState(null);

  const {
    visibleData,
    expandedItems,
    toggleItem,
    hasDescendants,
  } = useTreeState({
    data,
    defaultExpanded: true,
  });

  const getIcon = (item, expanded) => {
    if (item.type === 'folder') {
      return expanded ? <FolderOpen /> : <Folder />;
    }
    return <File />;
  };

  return (
    <VirtualTreeView
      data={visibleData}
      getIcon={getIcon}
      height={500}
      overscan={5}
      hoveredId={hoveredId}
      onItemHover={setHoveredId}
      expandedItems={expandedItems}
      onToggleItem={toggleItem}
      hasDescendants={hasDescendants}
    />
  );
}

Key Differences from TreeView

FeatureVirtualTreeViewTreeView
RenderingOnly visible itemsAll items
Performance with 10k itemsSmoothLaggy
Initial renderFastSlow for large data
Memory usageLowHigh for large data
height propRequiredOptional

Migration from TreeView

To migrate from TreeView to VirtualTreeView:

  1. Import VirtualTreeView instead of TreeView
  2. Add a height prop (required for virtualization)
  3. Optionally configure overscan for smoother scrolling
- import { TreeView } from '@vuer-ai/vuer-uikit';
+ import { VirtualTreeView } from '@vuer-ai/vuer-uikit';

- <TreeView
+ <VirtualTreeView
    data={visibleData}
    getIcon={getIcon}
+   height={400}
    expandedItems={expandedItems}
    onToggleItem={toggleItem}
    hasDescendants={hasDescendants}
  />