[Tabs] Toggling quickly can cause content to be duplicated
- Vorherrschende Sprache
- TypeScript
- Sterne
- 25k
- Forks
- 6.8k
- Ø Merge
- 1 T. 8 Std.
- Gemergte PRs (30 T.)
- 91
Beschreibung
#### Bug, feature request, or proposal:
I have had some trouble reproducing this one reliably (it seems to occur more often on my app than in reproductions) but there seems to be a race condition related to the rendering of tab content when it is lazy-loaded.
#### What is the expected behavior?
Tab content should only be displayed once.
#### What is the current behavior?
Toggling tabs very quickly (using arrow keys + space bar) can cause tab content to be drawn multiple times.
#### What are the steps to reproduce?
StackBlitz: https://stackblitz.com/edit/angular-material2-issue-h6pgut?file=app%2Fapp.component.ts
I am intentionally trying to be awkward in terms of timing (ie. setting the `selectedTabIndex` in a timeout), but this behaviour still should not happen.
I have recorded a reproduction in this video: https://gfycat.com/ReadyFairBasil
Note that at the start there is only one instance of each tab's content but by the end the second tab's content is duplicated.
#### What is the use-case or motivation for changing an existing behavior?
Bug
#### Which versions of Angular, Material, OS, TypeScript, browsers are affected?
Latest StackBlitz (Angular 6-rc2, Material 6-rc1)
#### Is there anything else we should know?
I could only reproduce by using lazy-loaded tabs + NgForTrackBy + OnPush + window.setTimeout, but these may not be necessary. I also had to use keyboard selection to toggle fast enough to trigger the issue.
Beitragsleitfaden
Rechercherichtung
Beginne damit, die StackBlitz-Reproduktion in app/app.component.ts auszuführen und eine schnelle Tastaturauswahl mit verzögert geladenen Tabs, NgForTrackBy, OnPush und setTimeout durchzuführen. Verfolge den Rendering-Pfad der Tab-Inhalte, um zu ermitteln, warum Inhalte mehr als einmal erscheinen; abgeschlossen ist die Aufgabe, wenn die Reproduktion beim wiederholten schnellen Umschalten genau eine Instanz beibehält.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- angular, typescript
- Bereich
- frontend
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 38/100