[compiler]: add `useWindowVirtualizer` to known incompatible librarie…
GitHub Commits - Example: React

[compiler]: add useWindowVirtualizer to known incompatible librarie…

Summary

#34493 added @tanstack/react-virtual's useVirtualizer to the known incompatible libraries, but not useWindowVirtualizer. Both hooks are thin wrappers around the same internal useVirtualizerBase, so they return the same referentially-stable virtualizer instance.

Its methods (e.g. getVirtualItems(), getTotalSize()) return internally-mutated values rather than new ones, which is exactly the "interior mutability" pattern that breaks memoization described in the module type provider.

Because only useVirtualizer was registered, code using useWindowVirtualizer is silently compiled with the same unsafe memoization. In our app this froze getVirtualItems() to its first-render value (an empty [] before measurement), producing permanently-empty virtualized lists - the same class of bug #34493 fixed, just via the window variant.

This registers useWindowVirtualizer alongside useVirtualizer with the identical shape, in both implementations:

  • compiler/packages/babel-plugin-react-compiler/src/HIR/DefaultModuleTypeProvider.ts
  • compiler/crates/react_compiler_hir/src/default_module_type_provider.rs (Rust port)

See also the community report referenced in #34493: TanStack/virtual#736 (comment)

How did you test this change?

Each addition mirrors the existing useVirtualizer entry exactly (same kind, params, return type, and knownIncompatible message shape); both are data-only additions to the module type providers, following the precedent set by #34493 which changed only the TS file. The Rust change keeps the two providers in sync.

Comments

No comments yet. Start the discussion.