Measurements of virtual items don't get re-calculated when lanes are changed (with `measureElement`)
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 45/100
- Issue-Typ
- Bug
- Klarheit
- Größtenteils klar
- Aktivitätsstatus
- Veraltet
- Tech-Stack
- react, typescript
- Bereich
- frontend
Rechercherichtung
Beginne mit der Reproduktion in packages/example und der im Issue beschriebenen Konfiguration von useWindowVirtualizer. Verfolge, wie getVirtualItems() die Messungen von measureElement verarbeitet, wenn sich der Wert von lanes ändert. Als abgeschlossen gilt die Aufgabe, wenn alle virtuellen Elemente im Bereich nach einer Änderung von lanes erneut gemessen werden, kein Element eine ungültige Lane behält und das Layout nicht beschädigt wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Describe the bug
There is a similar issue here: #1036
When using measureElement with useVirtualizer, changing the number of lanes dynamically causes the layout to break.
In my case, some of the virtual items returned by getVirtualItems() still have the old measurements as they don't get re-calculated. For example if I change lanes to a smaller number, some items still have the old larger lane, causing layout to break.
My debugging suggests the problem might be the minimum pendingMeasuredCacheIndexes, it wrongly skipped some of the items that should be visible, so their measurements are not re-calcualted.
Your minimal, reproducible example
https://github.com/hmpthz/another-react-responsive-masonry/tree/main/packages/example
Steps to reproduce
I actually created a repo trying to showcase and solve this. You can see the example above. Basically, the problem happens like this:
const { currentBreakpoint } = useBreakpoint(breakpointColumns);
const lanes = currentBreakpoint.nCol; // changing lanes dynamically
const rowVirtualizer = useWindowVirtualizer({
lanes: currentBreakpoint.nCol,
...others
});
const virtualItems = rowVirtualizer.getVirtualItems();
const columns = useMemo(() => {
const arr = Array.from({ length: lanes }, () => [] as VirtualItem[]);
for (const item of virtualItems) {
arr[item.lane].push(item); // you'll get error as lane is out of bound
}
return arr;
}, [virtualItems, lanes]);
Expected behavior
The measurements of all virtual items in the range get correctly re-calculated
How often does this bug happen?
Every time
Screenshots or Videos
No response
Platform
Any platform
tanstack-virtual version
v3.13.12
TypeScript version
v5.9.3
Additional context
While trying to solve this problem, I made significant changes to the sourcecode that I feel like might not be suitable for a PR to the original repo, so eventually I create a new one: https://github.com/hmpthz/another-react-responsive-masonry
I wonder if you have plan to solve this issue?
Terms & Code of Conduct
- I agree to follow this project's Code of Conduct
- I understand that if my bug cannot be reliable reproduced in a debuggable environment, it will probably not be fixed and this issue may even be closed.
- Vorherrschende Sprache
- TypeScript
- Sterne
- 7.1k
- Forks
- 472
- Ø Merge
- 1 T. 2 Std.
- Gemergte PRs (30 T.)
- 12
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus TanStack/virtual
-
measureElement caches 0 size for nodes that aren't attached yet (Vue: rows stack at start 0 and the list scrolls away on mount)Evtl. vergeben @webn00b hat das vor 10 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
`scrollToIndex(last, { align: 'end' })` stays short of the end after a measured row grows (virtual-core ≥ 3.17.0)Evtl. vergeben @minwookshin hat das vor 8 Tagen übernommen. Offen
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 55/100
TanStack/virtual#1290 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
virtual-core: desktop Safari drops the prepend anchor write when history lands during the top rubber-band bounceEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offen
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 38/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 62/100
Maintainer antworten meist innerhalb von 1 Tag
-
marko-virtual: scrollToEnd during an in-flight prepend strands the view one prepend above the bottom (chat-pretext e2e fails on CI)Evtl. wieder frei Ein Pull Request dazu wurde ohne Merge geschlossen. Offen
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 55/100
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in TanStack/virtual
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
Maintainer antworten meist innerhalb von 1 Tag
-
[Feature] 通知栏合并重复消息并显示次数Offenarea:ui enhancement issue-form:feature platform:cross-platform review: high
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
1lck/Lithe-IDEA#1092 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
developmentseed/deck.gl-raster#693 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
Marker-Inc-Korea/AutoRAG#1801 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
iii-hq/iii#2278 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag