From 4d34a5d01dec23c242e8b0c4f8b50c175bfc2133 Mon Sep 17 00:00:00 2001 From: dracofulmen Date: Tue, 23 Jun 2026 17:31:14 -0600 Subject: [PATCH 1/2] Scrolling fix Added check to observeElementOffset to prevent continuous re-renders --- packages/virtual-core/src/index.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/virtual-core/src/index.ts b/packages/virtual-core/src/index.ts index 7af791d1..1b180804 100644 --- a/packages/virtual-core/src/index.ts +++ b/packages/virtual-core/src/index.ts @@ -779,6 +779,13 @@ export class Virtualizer< // self-write — by the time the user has moved 1.5 px, the // intended value will already have been consumed by a prior // scroll event and cleared. + if (offset === this.scrollOffset && isScrolling === true) { + // this prevents continous rerenders + isScrolling = false; + this.isScrolling = false; + this.scrollOffset = offset + this.maybeNotify(); + } if ( this._intendedScrollOffset !== null && Math.abs(offset - this._intendedScrollOffset) < 1.5 @@ -804,7 +811,6 @@ export class Virtualizer< if (this.scrollState) { this.scheduleScrollReconcile() } - this.maybeNotify() }), ) From 4a61b19f443335a7c2b3922c2569e10a473df897 Mon Sep 17 00:00:00 2001 From: dracofulmen Date: Tue, 23 Jun 2026 17:46:18 -0600 Subject: [PATCH 2/2] Added changeset --- .changeset/cold-ads-lose.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/cold-ads-lose.md diff --git a/.changeset/cold-ads-lose.md b/.changeset/cold-ads-lose.md new file mode 100644 index 00000000..262cb5a3 --- /dev/null +++ b/.changeset/cold-ads-lose.md @@ -0,0 +1,5 @@ +--- +'@tanstack/virtual-core': patch +--- + +Fixed observeElementOffset to prevent continuous rerenders during or after scrolling