From 1b4a3f8d4918ad62e6a323b27afe4a375680d361 Mon Sep 17 00:00:00 2001 From: Yihui Liao <44729383+yihuiliao@users.noreply.github.com> Date: Wed, 29 Jul 2026 14:34:59 -0700 Subject: [PATCH] chore: reverse virtualizer audit (#10389) * remove getScrollAnchor from Layout * run update size on every render * update name * fix lint --- packages/react-aria/src/virtualizer/useVirtualizerItem.ts | 2 +- packages/react-stately/src/virtualizer/Layout.ts | 8 -------- packages/react-stately/src/virtualizer/Virtualizer.ts | 1 + 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/packages/react-aria/src/virtualizer/useVirtualizerItem.ts b/packages/react-aria/src/virtualizer/useVirtualizerItem.ts index a961a7e9af8..83cf3e42241 100644 --- a/packages/react-aria/src/virtualizer/useVirtualizerItem.ts +++ b/packages/react-aria/src/virtualizer/useVirtualizerItem.ts @@ -51,7 +51,7 @@ export function useVirtualizerItem(options: VirtualizerItemOptions): {updateSize if (layoutInfo?.estimatedSize) { updateSizeEvent(); } - }, [layoutInfo?.estimatedSize]); + }); // TODO: Consider using a MutationObserver in addition to ResizeObserver to detect // when inner DOM structure changes cause an item's height to change. diff --git a/packages/react-stately/src/virtualizer/Layout.ts b/packages/react-stately/src/virtualizer/Layout.ts index 30130b782c5..fd585fe7f59 100644 --- a/packages/react-stately/src/virtualizer/Layout.ts +++ b/packages/react-stately/src/virtualizer/Layout.ts @@ -14,7 +14,6 @@ import {InvalidationContext} from './types'; import {ItemDropTarget, Key, LayoutDelegate, Node} from '@react-types/shared'; import {LayoutInfo} from './LayoutInfo'; import {Rect} from './Rect'; -import {ScrollAnchorInfo} from './ScrollAnchor'; import {Size} from './Size'; import {Virtualizer} from './Virtualizer'; @@ -74,13 +73,6 @@ export abstract class Layout, O = any> implements L return newOptions !== oldOptions; } - /** - * Describes the edge-anchoring this layout wants, if any. Returning null (or omitting this - * method) disables scroll-anchoring entirely — the virtualizer's generic anchor-tracking logic - * is skipped. - */ - UNSTABLE_getScrollAnchorInfo?(_layoutOptions?: O): ScrollAnchorInfo | null; - /** * This method allows the layout to perform any pre-computation * it needs to in order to prepare LayoutInfos for retrieval. diff --git a/packages/react-stately/src/virtualizer/Virtualizer.ts b/packages/react-stately/src/virtualizer/Virtualizer.ts index cfbd178f957..bfa3bef8538 100644 --- a/packages/react-stately/src/virtualizer/Virtualizer.ts +++ b/packages/react-stately/src/virtualizer/Virtualizer.ts @@ -170,6 +170,7 @@ export class Virtualizer { } private relayout(context: InvalidationContext = {}) { + // @ts-ignore let anchorInfo = this.layout.UNSTABLE_getScrollAnchorInfo?.(context.layoutOptions) ?? null; // Capture scroll anchor from current (pre-layout) view positions.