Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bug(mat-tree): TreeControl's getChildren is called unexpectedly many times since cdk/material v18.2.0 and is especially problematic with asynchronous actions #30014

Open
1 task done
lmuraru-plenty opened this issue Nov 14, 2024 · 0 comments
Labels
area: cdk/tree P3 An issue that is relevant to core functions, but does not impede progress. Important, but not urgent

Comments

@lmuraru-plenty
Copy link

Is this a regression?

  • Yes, this behavior used to work in the previous version

The previous version in which this bug was not present was

18.1.5

Description

I've recently upgraded a project's @angular/cdk & @angular/material packages to 18.2, and I noticed a problem with the TreeControl when getChildren was asynchronous: sometimes it would result in an infinite loop of asynchronous actions; other times, it would perform a very large number of asynchronous actions; previous to 18.2 (18.1.5 was the last version it worked as expected), it would have only started a single asynchronous action per node. This is especially noticeable when the asynchronous action involves some kind of XHR.

Looking a bit further into it, I noticed that synchronous getChildren calls have also regressed in 18.2.0: there are now a lot more calls to this method than in cdk/material 18.1.5.

Reproduction

18.2.X:

StackBlitz link: StackBlitz 18.2.X
Steps to reproduce:

  1. Play around with the expand icons
  2. Notice the number of calls to getChildren at the top of the rendered page - it increases wildly more than the previous minor cdk/material version, and sometimes enters a seemingly infinite loop

Expected Behavior

There should be exactly 1 call to getChildren for each expanded node

18.1.X:

StackBlitz link: StackBlitz 18.1.X
Steps to reproduce:

  1. Play around with the expand icons
  2. Notice the number of calls to getChildren at the top of the rendered page - it increases by 1 for each expanded node

Actual Behavior

The number of calls to getChildren increases wildly, and I've also managed to un-deterministically enter a seemingly infinite loop.

Environment

  • Angular: 18.X.Y (reproduced on 18.1.X and 18.2.X)
  • CDK/Material: all versions since 18.2.0
  • Browser(s): Google Chrome 130
  • Operating System (e.g. Windows, macOS, Ubuntu): macOS
@lmuraru-plenty lmuraru-plenty added the needs triage This issue needs to be triaged by the team label Nov 14, 2024
@crisbeto crisbeto added P3 An issue that is relevant to core functions, but does not impede progress. Important, but not urgent area: cdk/tree and removed needs triage This issue needs to be triaged by the team labels Nov 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area: cdk/tree P3 An issue that is relevant to core functions, but does not impede progress. Important, but not urgent
Projects
None yet
Development

No branches or pull requests

2 participants